1047. 删除字符串中的所有相邻重复项
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
思路
消除相邻相同项和上一题消除括号相同原理。
遍历字符串,存放入栈中,有三种情况
- 栈为空则压入字符
- 栈顶和遍历字符不同,压入字符
- 栈顶和遍历字符相同,弹出字符
栈——后进先出,输出的字符串是反的,记得反转
代码
class Solution {
public:
string removeDuplicates(string s) {
stack<int> st;
for(int i:s)
{
if(st.empty() || st.top()!=i)
st.push(i);
else
st.pop();
}
string result="";
while(!st.empty())
{
result+=st.top();
st.pop();
}
reverse(result.begin(),result.end());
return result;
}
};