LC344.反转字符串:
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
left = 0
right = len(s) - 1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
定义前后双指针,两个指针往中间走。互换指针的值就可以得到反转的字符串。
LC541. 反转字符串II:
class Solution:
def reverseStr(self, s: str, k: int) -> str:
def reverseSlides(slides):
left, right = 0, len(slides) - 1
while left < right:
slides[left] ,slides[right] = slides[right], slides[left]
left += 1
right -= 1
return slides
res = list(s)
for index in range(0, len(s), 2*k):
res[index:index+k] = reverseSlides(res[index:index+k])
return "".join(res)
使用range(start,end,step)来确定需要调换的位置,左闭右开[start,end). " ".join (res)可以把数组转换为字符串
剑指Offer 05.替换空格:
class Solution:
def replaceSpace(self, s: str) -> str:
counter = s.count(" ") #内置函数统计空格数量
res = list(s)
res.extend([' ']*2*counter) #每碰到一个空格,就将字符串长度延长2格
left = len(s) - 1
right = len(res) - 1 #left指针指向原字符串末尾,right指向新字符串末尾
while left >= 0:
if res[left] != ' ':
res[right] = res[left]
left -= 1
right -= 1
else:
res[right] = '0'
res[right - 1] = '2'
res[right - 2] = '%'
right -= 3
left -= 1
return "".join(res)
如果遇到的不是空格,直接用left的元素替换right的数;如果遇到的是空格,那么把right指向的位置及往左边数的两个全部替换成“%“”2“”0“,然后right直接挪动三位,left挪动一位
LC 151 翻转字符串里的单词:
class Solution:
def trim_space(self,s):
n = len(s)
left, right = 0, n - 1
while left <= right and s[left] == " ":
left += 1
while left <= right and s[right] == " ":
right -= 1
s = s[left:right+1]
fast, slow = 0 ,0
while fast < len(s):
if fast >= 1 and s[fast] == " " and s[fast - 1] == " ":
fast += 1
else:
s[slow] = s[fast]
slow += 1
fast += 1
return s[:slow] #去除空格
def reverseString(self, s, left, right):
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
return None #反转字符数组
def reverse_each_word(self, s):
start, end = 0, 0
n = len(s)
while start < n:
while end < n and s[end] != " ":
end += 1
self.reverseString(s, start, end-1)
start = end + 1
end += 1
return None #反转每个单词
def reverseWords(self, s):
s = list(s)
l = self.trim_space(s)
self.reverseString(l, 0, len(l) - 1)
self.reverse_each_word(l)
return "".join(l) #反转字符串里的单词
剑指Offer58-II.左旋转字符串:
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
def reverse(s, left, right):
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
s = list(s)
reverse(s, 0, n-1) #反转前N个的字符子串
reverse(s, n, len(s)-1) #反转区间为N到末尾的字串
reverse(s, 0, len(s)-1) #反转整个字符串
return "".join(s)