📜  门| GATE-CS-2014-(Set-1) |第 60 题(1)

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

题目描述

给定一个字符串s,实现一个函数reverseWords(),将字符串s中的单词反转过来,同时保留单词之间的空格。

函数签名
def reverseWords(s: str) -> str:
    pass
示例
示例1
输入: "the sky is blue"
输出: "blue is sky the"
示例2
输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或后面包含多余的空格,但是反转后的单词之间只能包含一个空格。
解法

该题可以分解为以下两个步骤:

  1. 首先,去掉字符串s前后的空格,并将字符串s以空格为分隔符,分割为单词列表words。

  2. 然后,将单词列表words反转,并将各个单词之间加上一个空格,得到最终的字符串。

这里我们可以利用Python内置的字符串方法直接实现。先通过字符串的split()方法,将字符串分割为单词列表,然后通过切片操作[::-1]反转列表,最后调用join()方法将单词列表拼接为字符串即可。

代码实现如下:

def reverseWords(s: str) -> str:
    # 去掉前后空格,将字符串按空格分隔为单词列表
    words = s.strip().split()
    # 反转单词列表
    words = words[::-1]
    # 将单词列表中各个单词之间加上空格,拼接为字符串
    return " ".join(words)
复杂度分析

该算法的时间复杂度为O(n),其中n为字符串s的长度。具体来说,该算法需要进行字符串分割、列表反转和字符串拼接三个步骤,而这三个步骤的时间复杂度均为O(n)。因此,总时间复杂度为O(n)。

该算法的空间复杂度为O(n),其中n为字符串s的长度。具体来说,在进行字符串分割之后,需要创建一个单词列表words,该列表需要占用O(n)的空间。因此,总空间复杂度为O(n)。

总结

本题利用Python自带的字符串方法实现,算法简单高效。同时,要注意处理多余的空格,以及反转后各个单词之间只能包含一个空格的情况。