题目:
给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
整体思路:
1.先将整个字符串逆序,然后将每个单词逆序。‘hello world’->‘dlrow olleh’->‘world hello’
定义一个将字符串逆序的函数,传入整个字符串使其逆序,然年再分别传入每个单词使其逆序。
2.首先去除字符串首尾多余的空格,然后去除字符串内部多余的空格。
class Solution:
def reverseWord(self,s:str):
s = list(s)
// 去除多余的space
left,right = 0,len(s) - 1
new_s = []
while left <= right and s[left] == ' ':
left += 1
while left <= right and s[right] == ' ':
right -= 1
while left <= right:
if s[left] != ' ':
new_s.append(s[left])
elif new_s[-1] != ' ':
new_s.append(s[left])
left += 1
//逆序所有的字符
reverse_str = self.reverseString(new_s)
//逆序每个单词的字符
start,end = 0,0 # 控制每个单词的起点和终点
for i in range(len(reverse_str)):
if reverse_str[i] == ' ':
end = i
reverse_str = reverse_str[:start] + self.reverseString(reverse_str[start:end]) + reverse_str[end:]
start = i + 1
ans = ''.join(reverse_str)
return ans
def reverseString(self,string):
n = len(string)
left,right = 0,len(string) - 1
while left < right:
tmp = string[left]
string[left] = string[right]
string[right] = tmp
left += 1
right -= 1
return string