吐泡泡(栈)

问题链接https://ac.nowcoder.com/acm/problem/15029

#include<bits/stdc++.h>
using namespace std;
int main(){
    char p[120];
    while(cin>>p){
        int l=strlen(p);
        stack<char> a;
        for(int i=0;i<l;i++){
            if(a.empty()){
                a.push(p[i]);
            }else{
                if(a.top()=='O'&&p[i]=='O'){
                    a.pop();
                }
                else if(a.top()=='o'&&p[i]=='o'){
                    a.pop();
                    if(!a.empty()&&a.top()=='O'){
                        a.pop();
                    }else{
                        a.push('O');
                    }
                }
                else{
                    a.push(p[i]);
                }
            }
        }
        char k[120];
        int t=0;
        while(!a.empty()){
            k[t++]=a.top();
            a.pop();
        }
        for(int i=t-1;i>=0;i--){
            cout<<k[i];
        }
        cout<<endl;
    }
    return 0;
}

想整理的几点:
1.对于一个字符串的输入输出
char型可以直接用cin cout,也可以用gets();string用getline(cin,a);
2.对于stl中栈的简单应用 stack a;

  1. a.push() 入栈,将元素加到栈顶
  2. a.top() 返回栈顶元素
  3. a.pop() 删除栈顶元素,不返回
  4. a.empty() 判断栈中是否为空,为空返回true
  5. a.size() 返回栈中元素的个数

对于题目,就是将oO气泡输入进数组,然后通过入栈出栈的操作,如果是两个小气泡,就合成大气泡,再在栈顶调出一个元素继续判断是不是大气泡,如果是就破掉。同理判断到两个大气泡直接破掉。最后再用数组完成一次倒序,把栈底变成序列首。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值