3210. 找出加密后的字符串
题目描述
给你一个字符串 s 和一个整数 k。请你使用以下算法加密字符串:
- 对于字符串
s中的每个字符c,用字符串中c后面的第k个字符替换c(以循环方式)。
返回加密后的字符串。
示例 1:
输入: 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'。
示例 2:
输入: s = "aaa", k = 1
输出: "aaa"
解释:
由于所有字符都相同,加密后的字符串也将相同。
提示:
1 <= s.length <= 1001 <= k <= 104s仅由小写英文字母组成。
解法
方法一:模拟
我们可以使用模拟的方法,对字符串的第 $i$ 个字符,我们将其替换为字符串的第 $(i + k) \bmod n$ 个字符。
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 是字符串 $s$ 的长度。
Python3
class Solution:
def getEncryptedString(self, s: str, k: int) -> str:
cs = list(s)
n = len(s)
for i in range(n):
cs[i] = s[(i + k) % n]
return "".join(cs)
Java
class Solution {
public String getEncryptedString(String s, int k) {
char[] cs = s.toCharArray();
int n = cs.length;
for (int i = 0; i < n; ++i) {
cs[i] = s.charAt((i + k) % n);
}
return new String(cs);
}
}
C++
class Solution {
public:
string getEncryptedString(string s, int k) {
int n = s.length();
string cs(n, ' ');
for (int i = 0; i < n; ++i) {
cs[i] = s[(i + k) % n];
}
return cs;
}
};
Go
func getEncryptedString(s string, k int) string {
cs := []byte(s)
for i := range s {
cs[i] = s[(i+k)%len(s)]
}
return string(cs)
}
TypeScript
function getEncryptedString(s: string, k: number): string {
const cs: string[] = [];
const n = s.length;
for (let i = 0; i < n; ++i) {
cs[i] = s[(i + k) % n];
}
return cs.join('');
}