一、题目
第十七天 151.翻转字符串里的单词
建议:这道题目基本把做过的字符串操作都覆盖了,不过就算知道解题思路,本题代码并不容易写,要多练一练。题目链接:https://leetcode.cn/problems/reverse-words-in-a-string/
视频讲解:https://www.bilibili.com/video/BV1uT41177fX
二、看到题目的第一想法
刚看到这道题,我脑子里第一个想法就是:“这不就是把句子里的单词顺序反过来吗?”
一开始我想,是不是直接把整个字符串反转一下,再把每个单词单独反转就能解决?但又想到题目里还有很多细节,比如前后的空格、单词中间多个空格的问题,一下子有点懵。
再仔细看示例,发现核心是:先把单词按空格分开,再倒着拼回去,还要把多余的空格删掉。
三、实现过程中遇到的困难
1. 处理空格的问题:最头疼的就是空格。比如字符串前后有空格、单词中间有多个空格,直接用split分割的话,很容易把空字符串也当成单词,处理起来很麻烦。
2. C++中字符串处理不熟:我一开始想直接用C++的stringstream来分割单词,虽然简单,但感觉有点“偷懒”,而且也想练一练手动处理的方式,所以又改回了手动遍历字符串的方法。
3. 边界条件考虑不全:比如输入全是空格的情况?不过题目里说了保证至少有一个单词,所以这个不用考虑,但像单个单词、多个连续空格这些情况,还是踩了几个小坑。
四、代码实现
![]()
![]()
五、今日收获心得
1. 学会了两种处理这道题的思路:一种是直接分割单词再反转拼接,另一种是“整体反转+局部单词反转”的原地解法。
2. 对字符串中“空格”的处理更有经验了,知道了怎么手动遍历、跳过多余空格,提取出有效的单词。
3. 明白了做算法题,不能只想着“功能实现”,还要考虑题目里的细节和边界条件,不然很容易卡在测试用例上。