题目:https://leetcode.cn/problems/reverse-words-in-a-string/description/
完整题解:https://leetcode.cn/problems/reverse-words-in-a-string/solutions/2611893/chu-li-kong-ge-ku-han-shu-reversefan-zhu-bioo
思路来自代码随想录,对其中的除去多余空格做详细解释
本题的输入数据会给很多多余空格,我们需要用双指针遍历只留下每个单词间的一个空格就可以了
int slow=0;
int fast=0;
for(;fast<s.size();++fast)//动快指针
{
if(s[fast]!=' ')
{
if(slow!=0)
{
s[slow++]=' ';
}
while(fast<s.size()&&s[fast]!=' ')//!有字母了就在这里遍历,遍历出一个完成单词后退出,再下一个单词头进来了会直接在if(slow!=0)里在前一个补一个空格
{
s[slow++]=s[fast++];
}
}
}
s.resize(slow);//!!!把s的大小重新改变,去掉双指针后数组剩下的元素
** 重点在于理解if(slow!=0)什么时候生效
**
当快指针遍历到非空字母的时候,要往slow的位置放
if(slow!=0) { s[slow++]=' '; }
此时就执行操作添加一个空格,slow又指向空格的下一个位置,方便后续操作清楚多余空格后要resize s,不然后面的元素会影响结果