10:括号画家
-
总时间限制:
- 1000ms 内存限制:
- 262144kB
-
描述
-
Candela是一名漫画家,她有一个奇特的爱好,就是在纸上画括号。这一天,刚刚起床的Candela画了一排括号序列,其中包含小括号()、中括号[]和大括号{},总长度为N。这排随意绘制的括号序列显得杂乱无章,于是Candela定义了什么样的括号序列是美观的:
(1) 空的括号序列是美观的;
(2) 若括号序列A是美观的,则括号序列(A)、[A]、{A}也是美观的;
(3) 若括号序列A、B都是美观的,则括号序列AB也是美观的;
例如 [(){}]() 是美观的括号序列,而 )({)[}]( 则不是。
现在Candela想知道她画出的括号序列是不是美观的。你能帮帮她吗?
输入
- 一个括号序列,长度不超过10000。 输出
- 如果它是美观的,输出Yes,否则输出No。 样例输入
-
{}[(){}]()
样例输出
-
Yes
#include<iostream> #include<cmath> #include<cstring> #include<algorithm> #include<iomanip> #include<queue> #include<stack> #include<vector> #include<set> #include<map> using namespace std; string s; stack<char>T; int main() { cin>>s; int len=s.length(); bool flag=true; for(int i=0;i<len;++i) { if(s[i]=='('||s[i]=='{'||s[i]=='[') { T.push(s[i]); } else if(s[i]==')'||s[i]=='}'||s[i]==']') { if(T.empty()) { flag=false; break; } char tmp=T.top();T.pop(); if(s[i]==')'&&tmp!='('||s[i]==']'&&tmp!='['||s[i]=='}'&&tmp!='{') { flag=false; break; } } } if(flag)cout<<"Yes"<<endl; else cout<<"No"<<endl; return 0; }