题目:给出由小写字母组成的字符串 S
,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
分析:这一题也相当于是匹配问题,因此也是可以用栈来解决的经典题目。首先我们遍历字符串,将遍历到的每一个字符和栈顶的元素比较,如果相同就将栈顶元素弹出;如果栈是空的或者和栈顶元素不同,就将该字符放入栈里。最后剩下的栈元素重新放在字符串里,由于顺序相反,所以还需反转一下。
具体代码:
class Solution {
public:string removeDuplicates(string s) {stack<char> st;for(int i = 0; i < s.size(); i++) {if(st.empty() || s[i] != st.top()) {st.push(s[i]);}else{st.pop();}}string result = "";while(!st.empty()) {result += st.top();st.pop();}reverse(result.begin(), result.end());return result;}
};