https://ac.nowcoder.com/acm/contest/74/A?&headNav=www
题目描述
小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o"。 两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。 (是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。) 例如:ooOOoooO经过一段时间以后会变成oO。
输入描述:
数据有多组,处理到文件结束。 每组输入包含一行仅有'O'与'o'组成的字符串。
输出描述:
每组输出仅包含一行,输出一行字符串代表小鱼儿吐出的泡泡经过融合以后所剩余的泡泡。
示例1
输入
复制
ooOOoooO
输出
复制
oO
说明
自左到右进行合并
#include<bits/stdc++.h>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
char str[106];
while(cin>>str)
{
int l=strlen(str);
stack<char>a;
for(int i=0; i<l; i++)
{
if(a.empty())
{
a.push(str[i]);
//cout<<a.top()<<endl;
}
else
{
if(str[i]=='O'&&a.top()=='O')
{
a.pop();
//cout<<"OO "<<a.top()<<endl;
}
else if(str[i]=='o'&&a.top()=='o')
{
a.pop();
if(!a.empty()&&a.top()=='O')
{
a.pop();
}
else
a.push('O');
//cout<<a.top();
//cout<<"oo"<<a.top()<<endl;
}
else
{
a.push(str[i]);
}
}
}
//if(a.empty())cout<<"dd";
char s[102];
int K=0;
while(!a.empty())
{
s[K++]=a.top();
a.pop();
}
for(int j=K-1; j>=0; j--)
{
cout<<s[j];
}
cout<<endl;
}
}