码迷,mamicode.com
首页 > 其他好文 > 详细

5:括号画家

时间:2020-03-20 13:04:59      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:tac   包含   ace   string   漫画   i++   iostream   描述   push   

描述

Candela是一名漫画家,她有一个奇特的爱好,就是在纸上画括号。这一天,刚刚起床的Candela画了一排括号序列,其中包含小括号()、中括号[]和大括号{},总长度为N。这排随意绘制的括号序列显得杂乱无章,于是Candela定义了什么样的括号序列是美观的:
(1) 空的括号序列是美观的;
(2) 若括号序列A是美观的,则括号序列(A)、[A]、{A}也是美观的;
(3) 若括号序列A、B都是美观的,则括号序列AB也是美观的;
例如 [(){}]() 是美观的括号序列,而 )({)[}]( 则不是。
现在Candela想知道她画出的括号序列是不是美观的。你能帮帮她吗?

输入一个括号序列,长度不超过10000。输出如果它是美观的,输出Yes,否则输出No。

样例输入

{}[(){}]()

样例输出

Yes

#include <iostream> 
#include <stack> 
#include <string>
using namespace std;

int main(){
    string ch;
    stack<char> s;
    cin>>ch;
    
    for(int i=0;i<ch.size();i++){
        if(ch[i]==(||ch[i]==[||ch[i]=={) //前半部分括号入栈 
            s.push(ch[i]);
        else{
            if(!s.empty()){
                if((ch[i]==)&&s.top()==()||(ch[i]==]&&s.top()==[)||(ch[i]==}&&s.top()=={)){ //后半部分括号匹配前半部分括号,出栈
                    s.pop();
                }
                    
            } 
            
        }
    }
    if(s.empty()){
        cout<<"Yes"<<endl;
    }else{
        cout<<"No"<<endl;
    }
            
    }
    

解题想法:

1.如何输入数据?

      string类型--方便输入,且可以像数组一样进行访问

2.前半部分括号入栈,在遍历过程中出现后半部分括号就检查栈顶是否匹配,如匹配则出栈

 最终,栈空--全部匹配    栈非空--存在不匹配

 

5:括号画家

标签:tac   包含   ace   string   漫画   i++   iostream   描述   push   

原文地址:https://www.cnblogs.com/ANullValue/p/12530682.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!