栈的好戏还在继续!
题目要求删除两个相邻的相同项,例如:
abbaca
先删除bb,结果为aaca
然后再删除aa得到最终的结果ca
我们可以看到再删除完一对元素之后,还需检查前置元素是否还有成对可能。
针对这一特点我们可以考虑到用 栈 来处理字符串。
- 栈为空或当前遍历到的元素与栈顶元素不相同时当前元素入栈
- 当前遍历到的元素与栈顶元素相同时:栈顶元素出栈,与当前元素配对删除(其实就是不在栈中保存)
- 最后栈中剩余元素就是答案,但需要注意的是按顺序出栈后需要reverse()才为答案。
提供另一种简便思路
我们可以直接使用字符串模拟栈来保存答案,不论比较还是插入删除都在字符串的末尾进行(代替栈顶),这样遍历结束后也无需倒置。课程链接
string removeDuplicates(string s) {
string ans;
for(char i : s){
if(ans.empty() || ans.back() != i){
ans.push_back(i);
}else{
ans.pop_back();
}
}
return ans;
}
再见!