用栈来检测是否对应
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
char s[10200];
stack<char>q;
bool judge(char a,char b) {
if(a=='('&&b==')')
return false;
if(a=='['&&b==']')
return false;
return true;
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
scanf("%s",s);
int l=strlen(s);
bool flag=true;
while(!q.empty())
q.pop();
for(int i=0; i<l; i++) {
if(!flag)
continue;
if(s[i]=='['||s[i]=='(')
q.push(s[i]);
else {
if(q.empty()||judge(q.top(),s[i]))
flag=false;
else
q.pop();
}
}
printf("%s
",flag?"Yes":"No");
}
return 0;
}
题目地址:【NYOJ】[2]括号配对问题