前往此题

解题思路

双端队列

算法过程:

  1. 创建left,right指针,分别指向字符串的头和尾,然后字符串两边的空格符给去除
  2. 然后再创建一个双端队列d, 用于存储最终结果。再创建个栈stack用于存储单词,当遇到空格符后将stack中的单词放入队列d的开头
  3. 最后将d中的字符串拼接成字符串即可

代码

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, stack = collections.deque(), []
        while left <= right:
            if s[left] == " " and stack:
                d.appendleft(''.join(stack))
                stack = []
            elif s[left] != ' ':
                stack.append(s[left])
            left += 1
        d.appendleft(''.join(stack))

        return ' '.join(d)