题目描述
请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。
输入
有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。
输出
对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。
样例输入
4
[(d+f)*{}]
[(2+3))
()}
[4(6]7)9
样例输出
yes
no
no
no
#include<bits/stdc++.h>
using namespace std;
string str;
stack<char>s;
bool is;
void Match(){
is=true;
while(!s.empty()) s.pop();
s.push('#');
for(int i=0;i<str.size();++i){
char ch=s.top();
if(str[i]=='{') s.push(str[i]);
else if(str[i]=='}'){
if(ch=='{') s.pop();
else {
is=false;
return;
}
}
else if(str[i]=='[') s.push(str[i]);
else if(str[i]==']'){
if(ch=='[') s.pop();
else {
is=false;
return;
}
}
else if(str[i]=='(') s.push(str[i]);
else if(str[i]==')'){
if(ch=='(') s.pop();
else {
is=false;
return;
}
}else continue;
}
if(s.top()=='#') is=true;
else is=false;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
cin>>str;
Match();
if(is) printf("yes\n");
else printf("no\n");
}
return 0;
}