C++ 将给定的字符串通过将每个字符向前移动其在字母表中的值进行编码
在这个问题中,我们需要计算字符与’a’之间的距离,并通过将其添加到字符中来进行字符的移动。
解决方案的思路是找到两个字符的ASCII值之间的差异,并将其添加到当前字符的ASCII值中。
问题陈述-我们已经给出了一个长度为N的alpha字符串,其中只包含字母字符。我们需要根据以下条件对字符串进行编码。
- 获取当前字符与’a’之间的距离。
-
将字符按顺时针方向移动distance个位置。同时考虑循环移动。
示例
输入
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"
Output
"aaaa"
解释 - “a”和“a”之间的差值为0。因此,输出字符串与输入字符串相同。
方法
此方法将计算字符与“a”的差值。如果当前字符值与差值的和大于或等于26,则使用模运算执行循环移位。
算法
步骤1 - 使用for循环遍历给定的字符串。
步骤2 - 在整数变量“diff”中存储ch – ‘a’的值,即字符与“a”之间的距离。
步骤3 - 如果2 * diff大于或等于26,则对2 * diff进行模运算。
步骤4 - 将“diff”添加到“a”并将结果存储在字符“ch”中。
步骤5 - 如果2 * diff小于26,则将diff添加到“ch”。
步骤6 - 打印alpha字符串。
示例
#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),因为我们在原始字符串上进行更新,不使用额外的空间。
我们学会了通过将字符的循环移位添加到字符来编码给定的字符串。程序员可以编写代码来解密以上给定问题的编码字符串,以便更多地练习问题。