题目描述
小鱼儿吐泡泡,嘟嘟嘟冒出来。小鱼儿会吐出两种泡泡:大泡泡”O”,小泡泡”o”。
两个相邻的小泡泡会融成一个大泡泡,两个相邻的大泡泡会爆掉。
(是的你没看错,小气泡和大气泡不会产生任何变化的,原因我也不知道。)
例如:ooOOoooO经过一段时间以后会变成oO。
输入描述:
数据有多组,处理到文件结束。
每组输入包含一行仅有’O’与’o’组成的字符串。
输出描述:
每组输出仅包含一行,输出一行字符串代表小鱼儿吐出的泡泡经过融合以后所剩余的泡泡。
示例1
输入
ooOOoooO
输出
oO
说明
自左到右进行合并
备注:
对于100%的数据,
字符串的长度不超过100。
题意: 略
分析: 看到范围很小,直接用栈或其他的数据结构都可以,注意利用栈的话要注意,栈为空的情况
#include<iostream>
#include<stack>
#include<string.h>
using namespace std;
int main()
{
stack<char> m,n;
char a[101],b[101];
while(~scanf("%s",a))
{ int h=0;
for(int i=strlen(a)-1;i>=0;i--)
{
m.push(a[i]);
}
while(n.size()!=0)
{
n.pop();
}
char t;
while(m.size()!=0)
{
t=m.top();
if(n.size()==0)
{
n.push(t);
m.pop();
}
if(n.size()!=0&&m.size()!=0)
{
if(n.top()=='o'&&m.top()=='o')
{
n.pop();
m.pop();
if(n.size()==0)
{
n.push('O');
}
else
{
if(n.top()=='O')
n.pop();
}
}
else if(n.top()=='O'&&m.top()=='O')
{
n.pop();
m.pop();
}
else
{
n.push(m.top());
m.pop();
}
}
}
while(n.size()!=0)
{
b[h++]=n.top();
n.pop();
}
for(int i=h-1;i>=0;i--)
{
printf("%c",b[i]);
}
printf("\n");
}
return 0;
}