题目:
给定一个字符串,逐个翻转字符串中的每个单词。
说明:
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
思路解析
反转字符串,但不改变单个单词。这时想到双端队列。双端队列可以从两端实现pop,push。所以,我们只需要将输入字符串按照要求读出单个word,在从左端push进去就可以实现翻转了。
首先,把字符串首尾空格去除,然后利用单词间的空格来分词。即如果word不空且当前值为空格可以判断是单词存入双端队列左端。
class Solution:
def reverseWords(self, s: str) -> str:
left, right = 0, len(s) - 1
# 去掉字符串开头的空白字符
while left <= right and s[left] == ' ':
left += 1
# 去掉字符串末尾的空白字符
while left <= right and s[right] == ' ':
right -= 1
d, word = collections.deque(), []
# 将单词 push 到队列的头部
while left <= right:
if s[left] == ' ' and word:
d.appendleft(''.join(word))
word = []
elif s[left] != ' ':
word.append(s[left])
left += 1
d.appendleft(''.join(word))
return ' '.join(d)