📅  最后修改于: 2023-12-03 15:35:16.438000             🧑  作者: Mango
给定一个字符串,反转该字符串中各个单词的顺序,并去掉其中的空格。
例如,输入字符串为"the sky is blue",输出字符串为"blue is sky the"。
要求:空间复杂度为O(1),时间复杂度为O(n)。
首先,我们需要翻转整个字符串,得到一个倒序的字符串。然后,再翻转每个单词,得到顺序颠倒的字符串。
为了满足题目要求的空间复杂度为O(1)的条件,我们需要在原字符串上进行操作。
具体实现思路如下:
start
和end
表示单词的起始位置和结束位置。start
和end
表示单词的起始位置和结束位置,将其翻转。def reverseWords(s: str) -> str:
# 首先将整个字符串翻转
s = s[::-1]
start, end = 0, 0
n = len(s)
while start < n:
# 找到单词的起始位置和结束位置
while start < n and s[start] == ' ':
start += 1
end = start
while end < n and s[end] != ' ':
end += 1
# 翻转单词
s[start:end] = s[start:end][::-1]
start = end
# 去掉多余的空格
return ' '.join(s.split())
上述代码中,我们先将整个字符串翻转,然后用两个指针遍历每个单词,翻转每个单词,最后再去掉多余的空格并返回结果。