说说:
题意就是由字符串中的[]()匹不匹配的问题。解法很简单,搞个栈就搞定了。但是题目中有一个陷阱,那就是字符串为空也是合理的。所以在读取字符串的时候最好使用gets,因为scanf会自动将换行给忽略掉的。
源代码:
#include <stdio.h> #include <string.h> #define MAXN 128+5 int main(){ char stack[MAXN],c,s[MAXN]; int p,T,i,wrong; //freopen("data","r",stdin); scanf("%d\n",&T); while(T--){ p=wrong=0; gets(s); if(strlen(s)==0){//注意字符串为空的情况 printf("Yes\n"); continue; } for(i=0;i<strlen(s);i++){ if(p==0) stack[p++]=s[i]; else if(s[i]==']'){ if(stack[p-1]!='['){ wrong=1; break; } else p--; } else if(s[i]==')'){ if(stack[p-1]!='('){ wrong=1; break; } else p--; } else stack[p++]=s[i]; } if(wrong||p!=0) //结束时栈不为空,也是不合法的 printf("No\n"); else printf("Yes\n"); } return 0; }
时间: 2024-11-08 19:58:46