#题目链接:https://ac.nowcoder.com/acm/problem/15029

#题目描述

输入仅由'o'和'O'构成的字符串,从左到右扫描,'o'和'o'相邻则生成'O','O'和'O'相邻则删去。输出最后剩下的字符串。

注意:文件输入数据,直到遇见文件结束符输入结束。

#代码实现

using namespace std;

deque<char> st;
int main(void)
{
    string s;
    while (cin >> s)
    {
        for (int i = 0; i < (int)s.length(); i++)
        {
            if (!st.empty() && st.back() == 'o' && s[i] == 'o')
            {
                if (!st.empty())
                {
                    st.pop_back();
                }
                if (!st.empty() && st.back() == 'O')//若访问空栈,程序会异常终止
                {
                    st.pop_back();
                }
                else
                {
                    st.push_back('O');
                }
            }
            else if (!st.empty() && st.back() == 'O' && s[i] == 'O')
            {
                st.pop_back();
            }
            else
            {
                st.push_back(s[i]);
            }
        }
        while (!st.empty())
        {
            printf("%c", st.front());
            st.pop_front();
        }
        puts("");
    }
    return 0;
}