链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=2
经典的问题,用栈解决。
发现如果括号配对的话,栈顶的元素肯定与当前读入的元素匹配。如果出现一次不匹配的情况,直接break输出No即可。
#include <stdio.h> #include <string.h> char data[10002]; char stack[10000]; //栈 int s_top; //栈顶指针 int s_pop(void) { return stack[s_top--]; } void s_push(char c) { stack[++s_top]=c; } int main() { int n; int i; bool ans; scanf("%d",&n); while(n--) { memset(data,' ',sizeof(data)); scanf("%s",data); for (i=0;i<strlen(data);i++) //把所有的字符串扫描一遍 { if(data[0]==')'||data[0]==']') { ans=false; break; } if(data[i]=='('||data[i]=='['||s_top==0) s_push(data[i]); if(data[i]==')') { if(s_pop()=='(') ans=true; //当前这一层处理完 ,匹配 else { ans=false; //在当前这一层出现不匹配情况 break; } } if(data[i]==']') { if(s_pop()=='[') ans=true; else { ans=false; break; } } } ans?printf("Yes "):printf("No "); } return 0; }