题目:
给你一个字符串 s ,颠倒字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
采用比较传统的方法,先把多余的空格除去,然后存放在列表中,然后把整个字符串翻转,然后在对每个单词进行翻转,用join方法再转为字符串。(其实翻转字符串可以用栈,先进后出的原则,这样就能够把字符串翻转过来)
class Solution:
def reverseWords(self, s: str) -> str:
l=self.trim(s)
self.reverse(l,0,len(l)-1)
self.reverse_each_word(l)
return ''.join(l) #join生成字符串类型
def trim(self,s):
left,right=0,len(s)-1
while left<=right and s[left]==' ':
left+=1
while left<=right and s[right]==' ':
right-=1
output=[]
while left<=right:
if s[left]!=' ':
output.append(s[left])
elif output[-1]!=' ':
output.append(s[left])
left+=1
return output
#翻转字符串
def reverse(self,s: list, left: int, right: int):
while left<right:
s[left],s[right]=s[right],s[left]
left+=1
right-=1
#翻转每个单词
def reverse_each_word(self,s):
start,end=0,0
n=len(s)
while start<n:
while end<n and s[end]!=' ':
end+=1
self.reverse(s,start,end-1)
start=end+1
end+=1
后面在补充栈,队列的方法。