题解 | #点击消除#
点击消除
https://www.nowcoder.com/practice/8d3643ec29654cf8908b5cf3a0479fd5
本题使用栈进行模拟
可分为两种情况:
- 当栈不为空且读入的字符与栈顶字符相同时,将栈顶字符弹出
- 当栈为空或者读入的字符与栈顶字符不同时,将读入的字符入栈
最后,若栈为空则直接输出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;
}