Day08 字符串
1. 反转字符串
关键步骤就不要用库函数啦
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
# 双指针
l, r = 0, len(s)-1
while l<r:
s[l], s[r] = s[r],s[l]
l+=1
r-=1
2. 反转字符串II
在反转字符串外面嵌套一个for循环
class Solution:
def reverseStr(self, s: str, k: int) -> str:
def reverse_(str_):
l, r = 0, len(str_)-1
while l<r:
str_[l], str_[r] = str_[r], str_[l]
l+=1
r-=1
return str_
s = list(s)
for i in range(0,len(s), 2*k):
s[i:i+k] = reverse_(s[i:i+k])
return ''.join(s)
3. 剑指Offer 05.替换空格
因为字符串是不可变类型,所以操作字符串需要将其转换为列表,因此空间复杂度不可能为O(1)
class Solution:
def replaceSpace(self, s: str) -> str:
l = s.split(" ")
return "%20".join(l)
4. 翻转字符串里的单词
提高一下本题的难度:不要使用辅助空间,空间复杂度要求为O(1)。
本题难度在于:字符串前后都可能有空格
参考!数组章节中的移除元素
class Solution:
def reverseWords(self, s: str) -> str:
w = s.split()
l, r = 0,len(w)-1
while l<r:
w[l], w[r] = w[r], w[l]
l+=1
r-=1
return " ".join(w)
快慢指针
5. II.左旋转字符串
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
left = s.pop(0:n)
return s+left