本文主要是介绍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,不然后面的元素会影响结果
这篇关于leetcode 151反转字符串如何原地去除多余空格的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!