1、题目描述:
2、方法一:使用额外空间
思路:
最直接的想法是:把字符串从k=n的地方分开,然后把前面的一部分拼接到第二部分的后面,这样的话,我们可以使用一个新的空间来做这种调整。(这个方法不足以拿到offer,能不用就不用)。
python的话直接使用切片就可以了,代码如下。
代码:
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
res = ""
res += s[n:] # 把第二部分先拼接
res += s[:n] # 把第一部分拼接到第二部分后面
return res
3、方法二:三次翻转
思路:
直接来看剑指offer上的思路吧:
说简单点就是:先翻转第一部分,再翻转第二部分,最后把整个部分都翻转,这样就是最终的结果了。
代码:
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
s = list(s) # 由于python字符串不可变,因此用列表操作(分析的时这个空间复杂度不算)
def reverse(left, right):
"""翻转函数"""
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
# 1.先翻转左边,即0~n-1
reverse(0, n-1)
# 2.在翻转右边,即n~len(s)-1
reverse(n, len(s)-1)
# 3.整体翻转
reverse(0, len(s)-1)
return ''.join(s)