牛客:吐泡泡--栈

链接:题目传送门
来源:牛客网

时间限制: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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

容艾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值