给定字符串str和正整数N ,任务是反转N个字符并跳过N个字符,直到字符串的末尾以生成加密消息。
例子:
Input: str = “ihTs suohld ebeas!y”, K = 3
Output: This should be easy!
Explanation:
Reverse “ihT” -> “Thi”
“s” remains the same
“uoh” -> “hou”, and so on.
Input: str = “!ysae eb dluohs sihT”, K = 30
Output: This should be easy!
Explanation:
Since 30 is larger than the length of the given string(= 20), just print the reverse of the string.
方法:请按照以下步骤解决问题:
- 遍历给定的字符串。
- 将迭代器增加2 *N 。
- 逐步反转N个字符。
下面是上述方法的实现:
C++
// C++ Program to implement
// the above approach
#include
using namespace std;
// Function to decrypt and print the
// original strings
int decryptString(string s, unsigned int N)
{
for (unsigned int i = 0; i < s.size();
i += 2 * N) {
auto end = s.begin() + i + N;
// If length is exceeded
if (i + N > s.size())
end = s.end();
// Reverse the string
reverse(s.begin() + i, end);
}
cout << s << endl;
}
// Driver Code
int main()
{
string s = "ihTs suohld ebeas!y";
unsigned int N = 3;
decryptString(s, N);
return 0;
}
Python3
# Python3 program to implement
# the above approach
# Function to decrypt and print the
# original strings
def decryptString(s, N):
for i in range(0, len(s), 2 * N):
if (i + N < len(s)):
end = s[i + N]
# If length is exceeded
if (i + N > len(s)):
end = s[-1]
# Reverse the string
if (i == 0):
s = s[i + N - 1::-1] + s[i + N:]
else:
s = s[:i] + s[i + N - 1:i - 1:-1] + s[i + N:]
print(s)
# Driver Code
if __name__ == "__main__":
s = "ihTs suohld ebeas!y"
N = 3
decryptString(s, N)
# This code is contributed by ukasp
输出:
This should be easy!
时间复杂度: O(N)
辅助空间: O(1)