题目描述
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o"。 两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。 (是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。) 例如:ooOOoooO经过一段时间以后会变成oO。
#include<bits/stdc++.h>
using namespace std;
char stk[1000100];//手写栈
int hh = -1;//栈空
char op;//目标元素
string paopao;
void big(int x,char c)
{
if(x>=0 && stk[x] == 'O' && c == 'O')
hh = x-1;//栈顶减一
}
void small(int x,char c)
{
if(x>=0 && stk[x] == 'o' && c == 'o')
{
stk[x] = 'O';
big(x-1,stk[x]);//考虑Ooo的情况,对x-1来说,如果x-1是O,并且x也是O,那么函数内 hh 就会减2;
}
}
int main()
{
while(cin>>paopao)//多组输入
{
for(int i = 0;i<paopao.size();i++)
{
op = paopao[i];
if(hh<0)stk[++hh] = op;//栈空的话进栈
else
{
if((stk[hh]=='o'&&op=='O')||(stk[hh] == 'O'&&op=='o'))//大小不一样直接入栈
{
stk[++hh] = op;
}
else
{
big(hh,op);//函数内有了判断所以直接调用两个函数
small(hh,op);
}
}
}
for(int i = 0;i<=hh;i++)
cout<<stk[i];//输出
cout<<endl;
hh = -1; //回溯stk[]数组使其变为栈空*****很重要*****
}
return 0;
}