通过将每个字符向前移动其字母顺序值来编码给定的字符串


在这个问题中,我们需要计算字符和 'a' 之间的距离,并通过将其添加到字符中,我们需要移动字符。

解决方案方法是找到两个字符的 ASCII 值之间的差异,并将其添加到当前字符的 ASCII 值中。

问题陈述 - 我们给定了一个长度为 N 的字母字符串,其中仅包含字母字符。我们需要根据以下条件对字符串进行编码。

  • 获取当前字符和 'a' 之间的距离。

  • 按距离顺时针方向移动字符。还要考虑循环移位。

示例

输入

alpha = "abcd"

输出

'aceg'

解释

  • 'a' 和 'a' 之间的差值为 0。因此,我们需要进行 0 次移位。

  • 'a' 和 'b' 之间的差值为 1。因此,当我们将其移位 1 位时,我们得到 'c'。

  • 'a' 和 'c' 之间的距离为 2。因此,当我们将 'c' 移位 2 位时,我们得到 'e'。

  • 'a' 和 'd' 之间的距离为 3。因此,当我们将 'd' 移位 3 位时,我们得到 'g'。

输入

alpha = "tutorialspoint";

输出

'momciqawkecqam'

解释 - 我们计算了每个字符的字符差并按差值移位。

输入

alpha = "aaaa"

输出

"aaaa"

解释 - 'a' 和 'a' 之间的差值为 0。因此,输出字符串与输入字符串相同。

方法 1

此方法将获取 'a' 和字符之间的差异。如果当前字符值和差异的总和大于或等于 26,我们将取总和的模数以执行循环移位。

算法

步骤 1 - 使用 for 循环开始遍历给定的字符串。

步骤 2 - 在 'diff' 整数变量中,存储 ch - 'a',这是字符和 'a' 之间的距离。

步骤 3 - 如果 2*diff 大于或等于 26,则取 2 * diff 与 26 的模数。

步骤 4 - 将 'diff' 添加到 'a' 并将其存储到 'ch' 字符中。

步骤 5 - 如果 2*diff 小于 26,则将 diff 添加到 'ch' 中。

步骤 6 - 打印字母字符串。

示例

#include <bits/stdc++.h>
using namespace std;

void updateString(string alpha) {
   for (auto &ch : alpha) {
      int diff = ch - 'a';
      // If character + difference becomes greater than 'z'
      if (diff * 2 >= 26) {
         // Take modulus with 26
         diff = (diff * 2) % 26;
         // Add a difference
         ch = 'a' + diff;
      }
      // If 'z' is not exceeded
      else {
         // Add difference to the current character
         ch = ch + diff;
      }
   }
   cout << "The encoded string is - " << alpha << endl;
}
int main() {
   string alpha = "abcd";
   updateString(alpha);
   return 0;
}

输出

The encoded string is - aceg

时间复杂度 - O(N),其中 N 是字符串长度。

空间复杂度 - O(1),因为我们更新原始字符串而不使用额外的空间。

我们学习了如何通过将距离添加到字符来执行字符的循环移位来编码给定的字符串。程序员可以编写代码来解密编码的字符串,以获得更多关于上述问题的练习。

更新于: 2023年8月24日

242 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告