☰
元宝 LeetCode 151. 反转字符串中的单词 Python3实现
2026/10/5 13:16:04 网站建设 项目流程

思路

题目要求:反转字符串中单词的顺序,同时去除多余空格(首尾空格、单词间多个空格)。

核心技巧:整体反转 + 局部反转

  1. 去掉首尾空格,将中间连续空格压缩为单个空格
  2. 整体反转整个字符串
  3. 再逐个反转每个单词

例:
““the sky is blue””
去空格 →
““the sky is blue””
整体反转 →
““eulb si yks eht””
逐词反转 →
““blue is sky the”” ✅
这种方法只需 O(n) 时间、O(n) 空间(Python 字符串不可变,需用数组)。

代码实现

class Solution:
def reverseWords(self, s: str) -> str:
# 1. 清洗:去首尾空格,压缩中间空格
s = s.strip()
chars = list(s)

# 2. 整体反转 self.reverse(chars, 0, len(chars) - 1) # 3. 逐个反转每个单词 left = 0 for i in range(len(chars) + 1): # 遇到空格或到达末尾,说明一个单词结束 if i == len(chars) or chars[i] == ' ': self.reverse(chars, left, i - 1) left = i + 1 return ''.join(chars) def reverse(self, chars, l, r): """反转 chars[l:r+1]""" while l < r: chars[l], chars[r] = chars[r], chars[l] l += 1 r -= 1

更 Pythonic 的解法(面试也常用)

class Solution:
def reverseWords(self, s: str) -> str:
return ’ '.join(s.split()[::-1])

    “s.split()”:自动按空白分割并丢弃空字符串,天然处理多余空格

    “[::-1]”:切片反转列表

    “’ '.join(…)”:用单空格拼回字符串

    复杂度对比

    解法 时间 空间 特点
    双反转(原地思想) O(n) O(n) 考察指针与反转技巧,面试加分

    “split()[::-1]” O(n) O(n) 代码简洁,实际工程首选

    关键易错点

    • 不要直接用
      “chars.reverse()”,要自己写双指针,体现对过程的理解
    • 单词边界判断要用
      “i == len(chars) or chars[i] == ’ '”,漏掉末尾会导致最后一个单词不反转
    • Python 中
      “str” 不可变,必须转
      “list” 再操作,最后
      “‘’.join()”

    推荐:面试时先写出
    “split()[::-1]” 展示思路清晰,再补上双反转版本体现底层能力。

    需要专业的网站建设服务?

    联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

    立即咨询