344. 反转字符串
熟悉双指针的同学,这题应该可以秒了。
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
left, right = 0, len(s) - 1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
return s
541. 反转字符串II
思路:遍历步长设为 2k,使用双指针反转前 k 个字符。
在字符串末尾,如果剩余字符不足 2k 个,有以下两个观察:
1. 剩余字符数量介于 k 到 2k 个,双指针可以顺利反转前 k 个字符
2. 剩余字符数量不到 k 个,需要反转所有剩余字符
class Solution:
def reverseStr(self, s: str, k: int) -> str:
# 先将字符串转为列表,便于操作,最后转为字符串输出
s = list(s)
for i in range(0, len(s), 2*k):
# right的判断是为了应对字符串尾部的2种情况
left, right = i, min(i + k - 1, len(s) - 1)
# 双指针反转
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
return ''.join(s)
151. 反转字符串中的单词
思路:将字符串按空格拆分为列表,里面包含所有单词,接着使用双指针反转所有单词。
class Solution:
def reverseWords(self, s: str) -> str:
words = s.split()
left, right = 0, len(words) - 1
while left < right:
words[left], words[right] = words[right], words[left]
left += 1
right -= 1
return ' '.join(words)