344.反转字符串
题目链接:
344. 反转字符串 - 力扣(Leetcode)
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s
的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
在学之前,感觉只会切片的操作。不断练习,渐渐积累了双指针的应用。
完整代码:
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
n = len(s)
L = 0
R = n-1
while L < n//2:
s[L],s[R] = s[R],s[L]
L +=1
R -=1
541. 反转字符串II
题目链接:
541. 反转字符串 II - 力扣(Leetcode)
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
收获的点:
- 循环增加的2k个长度,for i in range(0,len(nums),2*k):
- ''.join(s) 列表变字符串
class Solution:
def reverseStr(self, s: str, k: int) -> str:
n = len(s)
def f1(s):
s = s[:][::-1]
return s
s = list(s)
for i in range(0,n,2*k):
s[i:i+k] = f1(s[i:i+k])
return ''.join(s)
05.替换空格
题目链接:剑指 Offer 05. 替换空格 - 力扣(Leetcode)
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
收获的点:
1)对于线性数据结构,填充或者删除,后序处理会高效的多。很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。
2)从后往前插入一开始想不到,希望通过这道题有所积累。有尝试从前往后插入,但是总是会被覆盖,可能没有扩容和移动(待解决)。
class Solution:
def replaceSpace(self, s: str) -> str:
n = len(s)
for i,e in enumerate(s[::-1]):
if e == ' ':
s = s[:n-(i+1)] + '%20'+s[n-i:]
return s
151.翻转字符串里的单词
题目链接:
给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
python的split函数、join函数
完整代码:
class Solution:
def reverseWords(self, s: str) -> str:
s_list = [i for i in s.split(' ') if len(i)>0]
return ' '.join(s_list[::-1])