📜  门|门 IT 2006 |第 46 题(1)

📅  最后修改于: 2023-12-03 15:28:48.226000             🧑  作者: Mango

门|门 IT 2006 |第 46 题

这是一道经典的计算机程序设计题目,旨在考察程序员对于算法和数据结构的掌握,以及对于编程语言的运用能力。该题分为以下两个部分:

题目描述

给定一个字符串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()

该代码中,我们首先将整个字符串进行了反转,然后找到每个单词的起始和终止位置,对于每个单词,我们将其反转并加入结果中。最后我们再将整个结果字符串进行清理,去掉首尾空格即可。