📅  最后修改于: 2023-12-03 15:28:48.226000             🧑  作者: Mango
这是一道经典的计算机程序设计题目,旨在考察程序员对于算法和数据结构的掌握,以及对于编程语言的运用能力。该题分为以下两个部分:
给定一个字符串s,编写一个函数reverseWords,将其中的单词顺序倒置并返回。其中,单词中间可能包含多个空格,但单词开头和结尾是没有空格的。若原字符串不存在任何单词,则返回空字符串。
例如,输入字符串为:"the sky is blue",则输出:"blue is sky the"。
该题目的解法有多种,最常见的方法是先整体反转字符串,再对每个单词进行单独反转,最终得到答案。该方法的时间复杂度为O(n),空间复杂度为O(1)。
代码实现如下:
def reverseWords(s: str) -> str:
# 整体反转字符串
s = s[::-1]
n = len(s)
start = end = 0
res = ""
while start < n:
# 找到单词的起始和终止位置
while start < n and s[start] == " ":
start += 1
end = start
while end < n and s[end] != " ":
end += 1
# 将单词加入结果中
if start < end:
res += s[start:end][::-1] + " "
start = end
return res.strip()
该代码中,我们首先将整个字符串进行了反转,然后找到每个单词的起始和终止位置,对于每个单词,我们将其反转并加入结果中。最后我们再将整个结果字符串进行清理,去掉首尾空格即可。