AB5 点击消除
可以用栈来解决。
- 当栈为空的时候,直接将字符入栈
- 当栈非空的时候
-
- 当前字符与栈顶字符相同
-
-
- 出栈
-
-
- 当前字符与栈顶字符不同
-
-
- 入栈
-
重复上述2步即可。
栈在输出的时候不能从栈底开始输出,需要先把栈顶元素弹出并保存下来,在进行输出。
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main() {
string str;
cin >> str;
stack<char> stk;
for (int i = 0; i < str.size(); i++) {
// 栈为空
if (stk.empty()) {
stk.push(str[i]);
continue;
}
auto it = stk.top();
// 栈顶元素与字符相同
if (it == str[i]) {
stk.pop();
// 栈顶元素与字符不同
} else {
stk.push(str[i]);
}
}
if (stk.empty()) cout << "0";
string ans;
while (!stk.empty()) {
ans += stk.top();
stk.pop();
}
for (int i = ans.size() - 1; i >= 0; i--) {
cout << ans[i];
}
return 0;
}