Leetcode刷题:剑指offer【面试题58-Ⅱ 左旋转字符串】

【面试题58-Ⅱ 左旋转字符串】

面试题58-Ⅱ:左旋转字符串:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

思路一:使用字符串切片和字符串拼接。但是这样做太投机取巧了!

时间复杂度 O ( n ) O(n) O(n),切片操作的时间复杂度
空间复杂度 O ( n ) O(n) O(n),两个字符串切片的总长度为 N

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        return s[n:] + s[:n]

思路二:创建额外的列表,将原字符串第 n+1 个到最后一个字符添加进去,再添加首位至第 n 个字符,将列表内容拼接为字符串返回。

时间复杂度 O ( n ) O(n) O(n),切片操作的时间复杂度
空间复杂度 O ( n ) O(n) O(n),两个字符串切片的总长度为 N

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        res = []
        for i in range(n, len(s)):
            res.append(s[i])
        for i in range(n):
            res.append(s[i])
        return ''.join(res)

你可能感兴趣的:(今天刷题了吗)