链接:题目传送门
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡"O",小泡泡"o"。
两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。
(是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。)
例如:ooOOoooO经过一段时间以后会变成oO。
输入描述:
数据有多组,处理到文件结束。
每组输入包含一行仅有’O’与’o’组成的字符串。
输出描述:
每组输出仅包含一行,输出一行字符串代表小鱼儿吐出的泡泡经过融合以后所剩余的泡泡。
输入:
ooOOoooO
输出:
oO
说明:自左到右进行合并
思路:
比较相邻两个数和栈的特点相似,后进先出,肯定是用栈,注意一下Ooo的情况即可
分为两种情况:
1.相邻两者相等,相等要注意Ooo和ooo的区别
2.不相等
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
string a;
int main()
{
while(cin>>a)
{
stack<char> s;
for(int i=0;i<a.size();i++)
{
if(s.empty())//若为空则直接加入
{
s.push(a[i]);
}
else
{
char b;
b=s.top(),s.pop();
if(b!=a[i])//若两者不相等加入
{
s.push(b);
s.push(a[i]);
}
else
{
if(b=='o')//两者都为oo的情况
{
if(s.empty())
{
s.push('O');
}
else //特判下是ooo还是Ooo
{
char c;
c=s.top();
s.pop();
if(c!='O')
{
s.push(c);
s.push('O');
}
}
}
}
}
}
a.clear();//清空
while(!s.empty())
{
a+=s.top();
s.pop();
}
int st=a.size()-1;
for(int i=st;i>=0;i--)
{
cout<<a[i];
}
cout<<endl;//输出必须是倒着
}
return 0;
}