Parentheses Balance
原题:https://odzkskevi.qnssl.com/e449865a4ae09d78796295322f57e52b?v=1518147364
题目大意:输入只含有"(",")","[","]"的字符串,判断是否所有的小括号和中括号都可以成对
分析:这道题可以使用栈来做,但是我的方法是通过统计是否有单个的括号来判断
AC代码:
1 #include <stdio.h> 2 3 int main() 4 { 5 int N,a,b,i; //a记录"("的个数,b记录"["的个数 6 int m1,m2; //m1记录")"的个数,m2记录"]"的个数 7 char s[128]; 8 scanf("%d",&N); 9 getchar(); 10 while (N--) 11 { 12 a=b=m2=m1=0; 13 gets(s); 14 if (s=='\0') 15 { 16 printf("Yes\n"); 17 continue; 18 } 19 for (i=0;s[i]!='\0';i++) 20 { 21 if (s[i]=='(') 22 a++; 23 if (s[i]=='[') 24 b++; 25 if (s[i]==')'&&s[i-1]!='[') 26 { 27 m1++; 28 if (a!=0) 29 {a--;m1--;} //如果"("的个数不为0,则与前面匹配成功,a和m1都减少1 30 } 31 if (s[i]==']'&&s[i-1]!='(') 32 { 33 m2++; 34 if (b!=0) 35 {b--;m2--;} 36 } 37 } 38 if (a==0&&b==0&&m1==0&&m2==0) //a,b,m1,m2的值都为零则表示全部括号匹配成功 39 printf("Yes\n"); 40 else 41 printf("No\n"); 42 } 43 return 0; 44 }
Hello World qwq!

浙公网安备 33010602011771号