题解 | #吐泡泡#

吐泡泡

https://ac.nowcoder.com/acm/problem/15029

  • 题目考点:STL、栈(或队列),另外注意多组输入

  • 题目大意:给出一系列泡泡,两个小泡泡在一起会变成大泡泡,两个大泡泡在一起会爆炸;求这些泡泡的最终状态。

  • 题目分析: 依次从前往后遍历压入栈即可(入栈时将当前泡泡与栈顶泡泡相比较,两小泡泡变成大泡泡,两大泡泡爆炸),唯一注意点就是两个小泡泡变成大泡泡后,如果前面一个依然是大泡泡,把栈顶弹出即可。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>

using namespace std;

const int N = 100010;

int n, m, k, t;
stack<char> r;
string s, ans;

int main()
{
    while(cin >> s)
    {
        for(int i = 0; i < s.size(); i++)
        {
            char ch = s[i];
            if(r.empty()) r.push(ch);
            else if(r.top() != ch) r.push(ch);
            else
            {
                r.pop();
                if(ch == 'o' && r.empty()) r.push('O'); // 栈空,两个小泡泡变成了大泡泡
                else if(ch == 'o' && r.top() == 'O') r.pop();// 栈顶为大泡泡,弹出
            }
        }

        ans = "";  // 处理栈的弹出顺序,这里用queue更方便
        while(r.size())
        {
            ans += r.top();
            r.pop();
        }
        for(int i = ans.size() - 1; i >= 0; i--)
            cout << ans[i] ;
        cout << '\n';
    }
    return 0;
}

题解专栏 文章被收录于专栏

希望不断进步

全部评论

相关推荐

点赞 评论 收藏
分享
评论
3
收藏
分享
牛客网
牛客企业服务