题目描述
字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配。
如果括号有互相包含的形式,从内到外必须是<>,(),[],{}。
例如:输入: [()] 输出Yes,而输入([])应该输出:NO。
输入
文件的第一行为一个整数n(0<n<20),表示以下有多少个由括号组成的字符串。接下来的n行,每行都是一个由括号组成的长度不超过255的字符串。
输出
在输出文件中有N行,每行都是YES或NO。
样例输入
5
{}{}<><>()()[][]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
<}{{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
样例输出
YES
YES
YES
YES
NO
#include<bits/stdc++.h>
using namespace std;
string a;
int n,k[10000];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a;
int ss=0;
int t=0;
for(int j=0;j<=a.length();j++){
if(a[j]=='<'){
t++;
k[t]=1;
}
if(a[j]=='('){
t++;
k[t]==2;
if(k[t-1]==1)ss=1;
}
if(a[j]=='['){
t++;
k[t]=3;
if(k[t-1]==1||k[t-1]==2)ss=1;
}
if(a[j]=='{'){
t++;
k[t]=4;
if(k[t-1]==1||k[t-1]==2||k[t-1]==3)ss=1;
}
if(a[j]=='>'){
if(a[t]==1&&t>0)t--;
else ss=1;
}
if(a[j]==')'){
if(a[t]==2&&t>0)t--;
else ss=1;
}
if(a[j]==']'){
if(a[t]==3&&t>0)t--;
else ss=1;
}
if(a[j]=='}'){
if(a[t]==4&&t>0)t--;
else ss=1;
}
}
if(t==0&&ss==0)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}