leetcode 151反转字符串如何原地去除多余空格
题目: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的位置放
- 当刚刚开始遍历时,slow==0,遇到字母直接放入位置,不添加空格,消除字符串开头可能有的多余空格
- 用while遍历一整个单词,此时slow已经不等于0,而到了单词的下一个位置
- 此时快指针又遍历到字母(非空格)时,需要手动添加一个空格,
if(slow!=0) { s[slow++]=' '; }
此时就执行操作添加一个空格,slow又指向空格的下一个位置,方便后续操作
清楚多余空格后要resize s,不然后面的元素会影响结果
原文地址:https://blog.csdn.net/2301_81198610/article/details/135712192
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!