本文最后更新于 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。

其他变量:函数使用了两个循环变量ik,以及一个字符串长度变量 len(s),总共需要常数级别的额外空间,即 O(1)。

总空间复杂度:主要的空间消耗是存储加密字符串 new_s,其大小为 n,因此总的空间复杂度是 O(n)