Yandex.Algorithm Open 2011: Qualification 1-A

题目

https://codeforces.com/contest/81/problem/A

问题重述

两个连在一起的才能删除。如abba先删除bb,删除后变成了aa,再删除相连的aa,字符串变空。

思路

栈。每个字母与栈顶的元素比较:

  1. 相同的话删栈顶
  2. 不同的话进栈

最后翻转下字符串

代码

    //原来是开心消消乐
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <stack>
     
    using namespace std;
    const int N = 26;
    int a[N];
    string s;
     
    //栈 每加一个和栈顶比较下 相同就删除栈顶 不同加进来
    int main()
    {
        cin >> s;
        stack<char>st;
        st.push('#');
        
        for(char c : s)
        {
            if(c == st.top())
            {
                st.pop();
            }
            else
                st.push(c);
        }
        
        string ans1, ans2;
        while(st.size() > 1)
        {
            ans1 += st.top();
            st.pop();
        }
        
        for(int i = ans1.size() - 1; i >= 0; -- i) ans2 += ans1[i];
        cout << ans2;
        return 0;
    }
posted @ 2021-11-30 13:32  birds_fly  阅读(54)  评论(0)    收藏  举报