/*括號配對問題:第一行輸入一個數N(0<N<=100),表示有N組測試數據。*/ /*後面的N行輸入多組輸入數據,每組輸入數據都是一個字符串S(S的長度小於10000,且S不是空串),*/ /*測試數據組數少於5組。數據保證S中只含有"[","]","(",")"四種字符。匹配輸出yes,否則輸出no*/ /*author:dzw*/ /*date:2015-9-14*/ /*解析:用a表示左括號個數,匹配一個a減1.故最後a=0時則匹配成功。*/ /*特例:如果匹配成功字段後下面的首個字符是右括號,用標識b來表示,此時無論後面又多少括號都不匹配成功*/ #include<stdio.h> #include<string.h> int main() { int n,i,j; scanf("%d",&n); int c[n]; char num[n][10000]; for(i=0;i<n;i++) { int a=0,b=1; scanf("%s",num[i]); for(j=0;j<strlen(num[i]);j++) { switch(num[i][j]) { case ')':if(a==0) b=0;if(num[i][a-1]=='(') a-=1;break; case ']':if(a==0) b=0;if(num[i][a-1]=='[') a-=1;break; case '(':num[i][a]=num[i][j];a+=1;break; case '[':num[i][a]=num[i][j];a+=1;break; } } if(a!=0|b==0) c[i]=0; else c[i]=1; } for(i=0;i<n;i++) { if(c[i]==0) printf("no\n"); else printf("yes\n"); } return 0; }
自己測試通過,但是不能Accepted。不知道為什麼