标签: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.前半部分括号入栈,在遍历过程中出现后半部分括号就检查栈顶是否匹配,如匹配则出栈
最终,栈空--全部匹配 栈非空--存在不匹配
标签:tac 包含 ace string 漫画 i++ iostream 描述 push
原文地址:https://www.cnblogs.com/ANullValue/p/12530682.html