leetcode-No.3210. 找出加密后的字符串
本文最后更新于 2024-07-18,文章内容可能已经过时。
题目
给你一个字符串 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 <= 100
1 <= k <= 104
s
仅由小写英文字母组成。
答案代码
"""
给你一个字符串 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"
解释:
由于所有字符都相同,加密后的字符串也将相同。
"""
class Solution(object):
def getEncryptedString(self, s: str, k: int):
"""
:type s: str
:type k: int
:rtype: str
"""
new_s = ""
for i in range(len(s)):
new_s += s[(i + k) % len(s)]
return new_s
if __name__ == '__main__':
s = "dart"
k = 3
print(Solution().getEncryptedString(s, k))
if __name__ == '__main__':
s = "aaa"
k = 1
print(Solution().getEncryptedString(s, k))
结果分析
时间复杂度分析:
循环次数:该函数使用一个循环来遍历输入字符串s
中的每个字符,循环次数为字符串的长度 n,其中 n 是 s
的长度。
字符操作:在循环体内,每个字符都被操作一次,以确定其在加密字符串中的新位置。这需要常数时间的操作,即 O(1)。
总时间复杂度:由于循环次数为 n,并且每次循环中的操作是 O(1),所以总的时间复杂度是 O(n)。
空间复杂度分析:
存储加密字符串:函数使用一个额外的字符串 new_s
来存储加密后的字符串。这个字符串的大小与输入字符串 s
的大小相同,即 n。
其他变量:函数使用了两个循环变量i
和k
,以及一个字符串长度变量 len(s)
,总共需要常数级别的额外空间,即 O(1)。
总空间复杂度:主要的空间消耗是存储加密字符串 new_s
,其大小为 n,因此总的空间复杂度是 O(n)。