本题使用栈进行模拟
可分为两种情况:
- 当栈不为空且读入的字符与栈顶字符相同时,将栈顶字符弹出
- 当栈为空或者读入的字符与栈顶字符不同时,将读入的字符入栈
最后,若栈为空则直接输出0
,否则将栈内字符依次弹出存入string
中,之后使用reverse
将字符串翻转后输出即可。
#include<iostream> #include<stack> #include<algorithm> // reverse()需引入的头文件 using namespace std; int main() { stack<int> sk; // 使用栈进行模拟 char t = getchar(); // 读入单个字符 while(t != '\n') { if(!sk.empty() && sk.top() == t) // 第一种情况 { sk.pop(); } else // 第二种情况 { sk.push(t); } t = getchar(); } if(sk.empty()) { cout<<0; } else { string res; while(!sk.empty()) // 依次弹出栈中的字符并存入string中 { res += sk.top(); sk.pop(); } reverse(res.begin(), res.end()); // 将string进行翻转 cout<<res; } return 0; }