344.反转字符串
看到这个反转就想直接用库函数
思路
双指针的方法,一个在头,一个在尾,两两交换,再向中间移动。
伪代码
python
len=nums.size
for(i=0,j=len-1;i<len/2;i++,j--):
swap(nums[i],nums[j])
写题

python
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
n=len(s)
i=0
j=n-1
while(i<n//2):
s[i],s[j]=s[j],s[i]
i+=1
j-=1
541. 反转字符串II
题目链接541. 反转字符串 II - 力扣(LeetCode)
思路
我写了一版,但还是有问题
我的思路是分组,每k个一组,每两组把前面那一组内部交换一次。
写题
错误
**错误1:**忽略str不可约直接修改的问题,把str转为了列表,并且
"b","a","c","d","f","e","g"怎么改成"bacdfeg",用了' '.join(s)
**错误2:**没有处理n<k的情况,后面又单独加上
python
class Solution:
def reverseStr(self, s: str, k: int) -> str:
n=len(s)
group_n=n//k
s=list(s)
if n<k:
left=0
right=n-1
while(left<n//2):
s[left],s[right]=s[right],s[left]
left+=1
right-=1
for i in range(0,group_n,2):
left=i*k
right=(i+1)*k-1
while(left-i*k < k//2):
s[left],s[right]=s[right],s[left]
left+=1
right-=1
return ''.join(s)
但是还是有14个用例不通过

-
没处理
k ≤ n < 2k的情况 -
循环写法虽然能跑,但最后一组可能漏翻转
提交

python
class Solution:
def reverseStr(self, s: str, k: int) -> str:
s=list(s)
n=len(s)
for i in range(0,n,2*k):
left=i
right=min(i+k-1,n-1)
while(left<right):
s[left],s[right]=s[right],s[left]
left+=1
right-=1
return ''.join(s)
for i in range(0,n,2*k):
-
每次跳 2k 个字符
-
完美对应:每 2k 个字符处理一次
right=min(i+k-1,n-1)
-
如果剩下 ≥k 个字符 → 翻转前 k 个
-
如果剩下 <k 个字符 → 翻转全部
这两排代码简直是焚诀,将处理过程简化很多,那个right我只会想到写分好几种情况的,不用把这个融合的一起
54.替换数字
思路
字符串不能改?换成列表,最后输出再转换一下
遍历每个字符,判断是不是数字,是数字就替换
写题
流下感动的泪水,好久没写过这么简单的题了

python
s=input()
s=list(s)
for i in range(len(s)):
if s[i]>='0' and s[i]<='9':
s[i]='number'
print(''.join(s))