本题使用栈进行模拟

可分为两种情况:

  1. 当栈不为空且读入的字符与栈顶字符相同时,将栈顶字符弹出
  2. 当栈为空或者读入的字符与栈顶字符不同时,将读入的字符入栈

最后,若栈为空则直接输出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;
}