2.括号配对问题
时间限制:3000 ms | 内存限制:65535 KB难度:3
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])
样例输出
No
No
Yes
---------------------------------------------------------------------------------------------------------------------------------------------
学数据结构时的例题就有讲到这个问题
我第一次做这个题的时候很笨的去自己重新写了一个结构体来实现栈,后来发现没那么麻烦,直接一个数组搞定。
注意Ascii码:(:40; ):41; [:91; ]:93
#include <stdio.h>
int main(){
int n,d,t;
char S[10001];//读入输入,同时作为栈使用,大小其实不用10001,5001足矣,但是需要加入额外的判断
scanf("%d\n",&n);
while(n--){
d=1;
while((S[d]=getchar())!='\n'){
t=S[d]-S[d-1];
if(!(t-1)||!(t-2))d-=2;//匹配,出栈
else if(t==53||t==-50){//括号不匹配,放弃缓冲区输入,结束while循环
gets(S);
break;
}
d++;
}
puts(d==1?"Yes":"No");
}
return 0;
}