题解 | #吐泡泡#
吐泡泡
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;
}
题解专栏 文章被收录于专栏
希望不断进步