● 344.反转字符串
题目链接:344. 反转字符串 - 力扣(LeetCode)
思路:我们用双指针 用ch来储存其中一个元素 left在左边 right在右边 用while left<right来遍历 每一次都让指针两边的元素倒转即可
下面是代码
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
return s
(这里不用return s)
● 541. 反转字符串II
题目链接:541. 反转字符串 II - 力扣(LeetCode)
做题思路:这个题与上面这个题很类似,但是我们需要理清楚
- 如果剩余字符少于
k
个,则将剩余字符全部反转。 - 如果剩余字符小于
2k
但大于或等于k
个,则反转前k
个字符,其余字符保持原样。
是什么意思 比如我们的步子一步是跨2k 但是在地上只留下了k的印记 当剩余的路小于k的时候我们一步就到了终点 但是印记比剩余的路大 所以就是剩余字符全部反转 可是如果剩余的路小于2k大于k 虽然我们一步迈过去了 但是留在地上的印记只有k 于是根据描述就可以写出下面的代码
class Solution:
def reverseStr(self, s: str, k: int) -> str:
res = list(s)
for cur in range(0, len(s), 2 * k):
res[cur: cur + k] =reversed(res[cur: cur + k])
return ''.join(res)
● 卡码网:54.替换数字
题目链接:题目页面 (kamacoder.com)
思路:python有isdigit()函数可以判断是否是数字 所以直接用for遍历即可
下面是代码
s = list(s)
for i in range(len(s)):
if s[i].isdigit():
s[i] = 'number'
return ''.join(s)
● 151.翻转字符串里的单词
题目链接:151. 反转字符串中的单词 - 力扣(LeetCode)
(因为有些办法在文章的上文中已经提到了 比如第一题的反转 而用reverse也可以实现相同的效果 于是我们直接采用reverse)
思路:这个题需要把字符串转换成列表 并且把里面所有的空格都去掉 然后用reverse反转后我们直接用return' '. join(s)来实现转换到字符串并且加上空格
下面是代码
class Solution:
def reverseWords(self, s: str) -> str:
s = s.split()
s = [s.strip() for s in s]
s.reverse()
return ' '.join(s)
● 卡码网:55.右旋转字符串
题目链接:题目页面 (kamacoder.com)
思路:我们用双指针法 left是左 right是又 给left与right设置一个范围 然后用第一个题的办法交换就可以了 下面是代码
s=list(s)
left=0
right=len(s)-1
while left<=k-1 and right<=len(s)-k:
ch = s[left]
s[left]=s[right]
s[right]=ch
return ''.join(s)