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 }

 

posted @ 2018-02-14 12:19  Ashechol  阅读(117)  评论(0)    收藏  举报