题目描述
思路解析动画文字版
记住「先拆词去空、再从末尾往前逐个拼」,下面每帧都在套它。
先把原句按空格切开、丢掉所有空串,得到 6 个干净单词(多余空格全没了)。接下来确认这些单词,再从最右边往左逐个拼。
第 0 个单词是 “the”(蓝色标已确认)。空格只是分隔符,连续空格不会产生空单词——这一步顺手就把空格问题解决了。
第 1 个单词是 “quick”(蓝色标已确认)。空格只是分隔符,连续空格不会产生空单词——这一步顺手就把空格问题解决了。
第 2 个单词是 “brown”(蓝色标已确认)。空格只是分隔符,连续空格不会产生空单词——这一步顺手就把空格问题解决了。
第 3 个单词是 “fox”(蓝色标已确认)。空格只是分隔符,连续空格不会产生空单词——这一步顺手就把空格问题解决了。
第 4 个单词是 “jumps”(蓝色标已确认)。空格只是分隔符,连续空格不会产生空单词——这一步顺手就把空格问题解决了。
第 5 个单词是 “now”(蓝色标已确认)。空格只是分隔符,连续空格不会产生空单词——这一步顺手就把空格问题解决了。
从右往左:现在轮到下标 5 的 “now”(绿色),把它取出来准备放到结果末尾。
把 “now” 拼进结果,单词间只放一个空格。已放入 1 个,结果现在是 “now”。
从右往左:现在轮到下标 4 的 “jumps”(绿色),把它取出来准备放到结果末尾。
把 “jumps” 拼进结果,单词间只放一个空格。已放入 2 个,结果现在是 “now jumps”。
从右往左:现在轮到下标 3 的 “fox”(绿色),把它取出来准备放到结果末尾。
把 “fox” 拼进结果,单词间只放一个空格。已放入 3 个,结果现在是 “now jumps fox”。
从右往左:现在轮到下标 2 的 “brown”(绿色),把它取出来准备放到结果末尾。
把 “brown” 拼进结果,单词间只放一个空格。已放入 4 个,结果现在是 “now jumps fox brown”。
从右往左:现在轮到下标 1 的 “quick”(绿色),把它取出来准备放到结果末尾。
把 “quick” 拼进结果,单词间只放一个空格。已放入 5 个,结果现在是 “now jumps fox brown quick”。
从右往左:现在轮到下标 0 的 “the”(绿色),把它取出来准备放到结果末尾。
把 “the” 拼进结果,单词间只放一个空格。已放入 6 个,结果现在是 “now jumps fox brown quick the”。
从最后一个一路拼到第一个,单词顺序就整体反过来了,单词间只留一个空格。最终答案:“now jumps fox brown quick the”。
边界先想清:单词、纯首尾空格、中间连续空格。
面试常追问原地 O(1) 解法与 split 的细节。
参考代码
class Solution: def reverseWords(self, s: str) -> str: return ' '.join(reversed(s.split()))复杂度
- 时间:O(n),扫一遍切词 + 逆序拼接
- 空间:O(n),存切出的单词与结果串
易错点
面试追问把动画讲成自己的话
追问能否做到 O(1) 额外空间(原地)?
追问split() 不带参数和 split(" ") 有什么区别?
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
压缩字符串
LeetCode 443 · 中等 · 沿着 双指针套路 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题