思路
思路很类似下面这个问题:
栈和队列5:用栈检测括号是否匹配
删除字符串更简单一些,很像我们玩的“消消乐”。
具体思路在代码注释,也可以结合上面的括号检测一起理解。
#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;
class Solution {
public:
string removeDuplicates(string s) {
stack<char> st;
for (char i : s) {
//下面这两种情况进栈
//1.栈为空
//2.栈顶元素和现在正在扫描的字符i不同
if (st.empty() || st.top() != i) {
st.push(i);
} else {
//当栈顶元素和目前正在扫描的元素相同时,出栈
st.pop();
}
}
string result = "";//定义一个字符串变量保存结果
while ( !st.empty()) {
//若st不为空,则出将栈顶元素赋值
result += st.top();
st.pop();
}
//由于上面从栈复制到result的元素顺序是反的,所以使用resvers函数翻转一下
reverse(result.begin(), result.end());
return result;
}
};