344 反转字符串
用双指针进行调换就行,简单a了
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:
a = s[left]
s [left] = s[right]
s[right] = a
left += 1
right -= 1
return s
541. 反转字符串II
类似于上一道题,单独写一个函数,注意一下"".join(res)用来把列表合并为原来的字符串!
值得注意的是,循环跳出的条件又写错了!一定要在脑海中多次模拟!
class Solution:
def reverseStr(self, s: str, k: int) -> str:
def reverse(s):
left,right = 0,len(s)-1
while left < right:
s[left],s[right] = s[right],s[left]
left += 1
right -= 1
return s
n = 0
res = list(s)
#这一步注意判断条件!!!
while n <len(s):
#这一步一定要重新赋值!!!!
res[n:n+k] = reverse(res[n:n+k])
n += 2*k
# print(res)
return "".join(res)
剑指Offer 05.替换空格
我知道字符串是不可更改的类型,需要用列表去改变,但是我不太清楚怎么去判断空格,这是一个大挑战,然后最后怎么把列表合并成为一个字符串
额外用一个空列表的方法是比较简单的,但是这道题要用双指针方法挑战一下自己!!
class Solution:
def replaceSpace(self, s: str) -> str:
res = []
string = list(s)
for i in string:
if i == ' ':
res.append('%20')
else:
res.append(i)
return "".join(res)
其中"".join(res)的用法是,将列表之中的所有字符串连接在一起,双引号里面的内容是字符串之间的连接内容。
151.翻转字符串里的单词
初步的想法是,先把整个字符串整体反转,再用双指针,双指针指向空格之处,两个双指针之间的字符串进行反转
问题是:里面的多个空格怎么处理
先偷懒,用s.spilt(),将字符串转化为列表里面的单词形式
class Solution:
def reverseWords(self, s: str) -> str:
res = s.split()
left ,right = 0,len(res)-1
while left < right:
res[left],res[right] = res[right],res[left]
left += 1
right -= 1
return ' '.join(res)
剑指Offer58-II.左旋转字符串
左旋这类问题,是反转字符串这种问题组合起来的,这道题是前n个字符转一下,后面再转一下,再整体旋转
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
def reverstring(s):
left,right = 0,len(s)-1
while left < right:
s[left],s[right] = s[right],s[left]
left += 1
right -= 1
return s
res = list(s)
res[0:n] = reverstring(res[0:n])
res[n:] = reverstring(res[n:])
res = reverstring(res)
return ''.join(res)