https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串abcdefg
和数字2
,该函数将返回左旋转两位得到的结果cdefgab
。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
限制:
本题做法较多,本文主要介绍 “字符串切片” , “列表遍历拼接” , “字符串遍历拼接” 三种方法。
由于本题的多解法涉及到了 字符串为不可变对象 的相关概念,导致效率区别较大。因此,单列一节 三种方法的效率分析 ,望对各位有所帮助。
应用字符串切片函数,可方便实现左旋转字符串。
获取字符串 s [ n : ] s[n:] s[n:] 切片和 s [ : n ] s[:n] s[:n] 切片,使用 + + ++ ++运算符拼接并返回即可。
Python
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
return s[n:] + s[:n]
若面试规定不允许使用 切片函数 ,则使用此方法。
算法流程:
list(Python)
、StringBuilder(Java)
,记为 resres
;resres
添加 “第
n
+
1
n + 1
n+1 位至末位的字符” ;resres
添加 “首位至第
n
n
n 位的字符” ;resres
转化为字符串并返回。python
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)
若规定
Python
不能使用join()
函数,或规定Java
只能用String
,则使用此方法。
此方法与 方法二 思路一致,区别是使用字符串代替列表。
resres
需要使用前一个长度
N
−
1
N-1
N−1 的 resres
),因此至少使用
O
(
N
)
O(N)
O(N) 的额外空间。python
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
res = ""
for i in range(n, len(s)):
res += s[i]
for i in range(n):
res += s[i]
return res