LC 151字符串中等第 43 / 95 题

反转字符串中的单词

Reverse Words in a String

字符串双指针
本机进度仅保存在当前浏览器

题目描述

给你一个字符串 s,请你反转字符串中单词的顺序。单词由非空格字符组成,输入中单词之间可能存在多个空格,结果应仅用单个空格分隔且不含首尾空格。

示例:s = " the sky is blue ",输出 "blue is sky the"。

解题思路

  1. 语言内置 split + reverse 一行可解;面试常要求 O(1) 空间的原地解法,练习手动处理。
  2. 原地三步:先整体反转全串,再逐个单词反转回来,最后清理多余空格(原地压缩)。
  3. 也可以先扫描切词再倒序拼接,实现简单且易于说清,注意空格压缩细节。

参考实现

查看参考实现Python · 建议先自行作答
def reverseWords(s):
    # 扫描切词后倒序拼接,兼顾空格压缩
    words = []
    i, n = 0, len(s)
    while i < n:
        if s[i] != ' ':
            j = i
            while j < n and s[j] != ' ':
                j += 1
            words.append(s[i:j])
            i = j
        else:
            i += 1
    return ' '.join(reversed(words))

复杂度与归属

时间复杂度O(n)
空间复杂度O(n)
所属分类字符串
题源LeetCode 151

关联教程

返回题图鉴