题目描述
给你一个字符串 s
和一个整数 k
。请你使用以下算法加密字符串:
- 对于字符串
s
中的每个字符c
,用字符串中c
后面的第k
个字符替换c
(以循环方式)。
返回加密后的字符串。
样例
输入: s = "dart", k = 3
输出: "tdar"
解释:
对于 i = 0,'d' 后面的第 3 个字符是 't'。
对于 i = 1,'a' 后面的第 3 个字符是 'd'。
对于 i = 2,'r' 后面的第 3 个字符是 'a'。
对于 i = 3,'t' 后面的第 3 个字符是 'r'。
输入: s = "aaa", k = 1
输出: "aaa"
解释:
由于所有字符都相同,加密后的字符串也将相同。
限制
1 <= s.length <= 100
1 <= k <= 10^4
s
仅由小写英文字母组成。
算法
(模拟) $O(n)$
- 新定义一个字符串存储答案,然后按照题目描述模拟。
时间复杂度
- 遍历字符串一次,故时间复杂度为 $O(n)$。
空间复杂度
- 需要 $O(n)$ 的额外空间存储答案。
C++ 代码
class Solution {
public:
string getEncryptedString(string s, int k) {
const int n = s.size();
string ans;
for (int i = 0; i < n; i++)
ans += s[(i + k) % n];
return ans;
}
};