1047删除字符串中所有的相邻重复项 Posted on 2020-04-22 Words count in article: 370 | Reading time ≈ 1 1047删除字符串中所有的相邻重复项下面是题目 下面是题目给出的模板12345class Solution {public: string removeDuplicates(string S) { }}; 这里给出两个解法,第一种是我自己想出来的原始解法,第二种是高人做的11234567891011121314151617181920212223242526class Solution {public: string removeDuplicates(string S) { stack<char>s; //首先压栈,如果有元素和栈顶重复,那么需要pop for(char n:S) { if(!s.empty()&&n==s.top()) s.pop(); else s.push(n); } string ans; //把栈里面的元素赋值给字符串,使用头插法 //直接赋值再使用reverse函数会导致超时 //即使这样,运行时长也很多 while(!s.empty()) { temp=ans; ans=s.top(); ans+=temp; s.pop(); } return ans; }}; 2.12345678910111213141516171819//短小且精悍class Solution {public: string removeDuplicates(string S) { int top = 0; //同样的是遍历S,不过他用在原字符串的基础上改,而不是另起炉灶 //这个top可以看作是“新”字符串的长度 for(char ch : S) { //如果“新“字符串长度为0或者相邻数字是不重复的,那么将修改 if(top == 0 || S[top-1] != ch) S[top++] = ch; //否则,如果相邻数字是重复的话,那么长度-1,下次修改string的时候 //会直接覆盖掉原来重复的第一个数字!妙 else top--; } //最后,重新规定S的长度,让他等于新字符串的长度,鸠占鹊巢 S.resize(top); return S; }}; -------------本文结束,感谢您的阅读------------- Post author: Jason Post link: https://jasonxqh.github.io/2020/04/22/1047%E5%88%A0%E9%99%A4%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E6%89%80%E6%9C%89%E7%9A%84%E7%9B%B8%E9%82%BB%E9%87%8D%E5%A4%8D%E9%A1%B9/ Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.