本文最后更新于:2020年11月17日 晚上

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串”I am a student.”,则输出”student. a am I”。

示例1:

输入:"the sky is blue"
输出:"blue is sky the"

注意:本题与主站151题相同

class Solution:
	def reverseWords(self, s):

方法一:双指针

算法解析:

  • 倒序遍历字符串$s$,记录单词左右索引边界$i,j$;
  • 每确定一个单词的边界,则将其添加至单词列表$res$;
  • 最终,将单词列表拼接为字符串,并返回即可。

复杂度分析:

  • 时间复杂度$O(N)$:其中$N$为字符串$s$的长度,线性遍历字符串。
  • 空间复杂度$O(N)$:新建的list(Python)或StringBuilder(Java)中的字符串总长度<=N,占用$O(N)$大小的额外空间。
class Solution:
    def reverseWords(self, s):
        s = s.strip() # 删除空格
        i = j = len(s) - 1
        res = []
        while i >= 0:
            while i >= 0 and s[i] != ' ': i -= 1
            res.append(s[i+1, j+1])
            while s[i] == ' ': i -= 1
            j = i
        return ' '.join(res)

方法二:分割+倒序