344.反转字符串
#伪代码
len=num.size()
#这里是i<len/2,而不是i<=len/2
for(i=0,j=len-1;i<len/2;i++,j--){
swap(num[i],num[j])
}
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
j=len(s)-1
for i in range(len(s)//2):
temp=s[i]
s[i]=s[j]
s[j]=temp
j-=1
return s
541. 反转字符串II
#伪代码
#i在移动时,每2k个往后移动
for(i=0;i<s.size;i+=2k){
#软件自带的库函数一般都是左闭右开规则 [i,i+k)
if(i+k<=s.size()):
reverse(s,i,i+k);
continue;
}
reverse(s,i,s.size);
class Solution:
def reverseStr(self, s: str, k: int) -> str:
def reverse(s):
j=len(s)-1
for m in range(len(s)//2):
temp=s[m]
s[m]=s[j]
s[j]=temp
j-=1
return s
s=list(s)
for i in range(0,len(s),2*k):
if(i+k<=len(s)):
s[i:i+k]=reverse(s[i:i + k])
continue
s[i:len(s)]=reverse(s[i:len(s)])
return ''.join(s)
剑指Offer 05.替换空格
class Solution:
def replaceSpace(self, s: str) -> str:
#left指的是在原先s上的指针;right指的是在扩充后的s上的指针
counter=s.count(' ')
res=list(s)
res.extend([' ']*counter*2)
left=len(s)-1
right=len(res)-1
while(left>=0):
if s[left]!=' ':
res[right]=s[left]
right-=1
else:
res[right-2:right+1]='%20'
right-=3
left-=1
return ''.join(res)
151.翻转字符串里的单词
#伪代码
移除多余的空格比较复杂
双指针法
#移除多余的空格的代码如下:
slow=0;
for(fast=0;fast<s.size();fast++){
if(s[fast]!=' '):
if(slow!=0):
s[slow]=' '
slow++;
if(fast<s.size()&&s[fast]!=' '):
s[slow]=s[fast]
fast++
slow++
}
s.resize(slow);
class Solution:
def reverseWords(self, s: str) -> str:
#反转字符串里的每个单词
def reverse(s):
j=len(s)-1
for i in range(len(s)//2):
temp=s[i]
s[i]=s[j]
s[j]=temp
j-=1
return s
#移动多余的空格
def remove_spaces(s):
left = 0
right=len(s)-1
while(left<=right and s[left]==' '):
left+=1
while(left<=right and s[right]==' '):
right-=1
tmp=[]
while(left<=right):
if(s[left]!=' '):
tmp.append(s[left])
elif(tmp[-1]!=' '):
tmp.append(s[left])
left+=1
return tmp
s=list(s)
s1=remove_spaces(s)
s2=reverse(s1)
#对每个单词单独反转
start=0
end=0
while(start<len(s2)):
while(end<len(s2) and s2[end]!=' '):
end+=1
s2[start:end]=reverse(s2[start:end])
start=end+1
end+=1
return ''.join(s2)
剑指Offer58-II.左旋转字符串
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
def reverse(s):
j=len(s)-1
for i in range(len(s)//2):
temp=s[i]
s[i]=s[j]
s[j]=temp
j-=1
return s
s=list(s)
s[0:n]=reverse(s[0:n])
s[n:len(s)]=reverse(s[n:len(s)])
s=reverse(s)
return ''.join(s)