本文最后更新于: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)
方法二:分割+倒序
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!