uva 673
这个题以前在数据结构书上面做过,需要使用栈,因为C语言创建一个栈有些麻烦,直接用的是c++的stack,它这个里面有一个期待匹配度,就是在栈顶的左括号是最期待匹配到右括号的,如果没有匹配到它想要的右括号,则直接错误。
#include <cstdio>
#include <stack>#include <cstring>
using namespace std;
int main(){
int limit,i,len,k;
char input[130];
while(scanf("%d\n",&limit)==1){
stack<char> s[limit];
for(i=0;i<limit;i++){
gets(input);
len=strlen(input);
for(k=0;k<len;k++){
if(input[k]=='('){
s[i].push(input[k]);
}else if(input[k]=='['){
s[i].push(input[k]);
}else if(input[k]==')'){
if(!s[i].empty() && s[i].top()=='(')
s[i].pop();
else{
break;
}
}else if(input[k]==']'){
if(!s[i].empty() && s[i].top()=='[')
s[i].pop();
else{
break;
}
}
}
if(s[i].empty() && k==len){
printf("Yes\n");
}else{
printf("No\n");
}
}
}
}