UVA 673 Parentheses Balance (栈)
题意描述:
给出一段只包含()和[]的字符串,判断是否合法,合法输出YES,不合法输出NO
规则:
1、该串为空,则合法
2、若A合法,B合法,则AB合法
3、若A合法,则(A)和[A]均合法
解题思路:
括号匹配问题,使用栈来解决,需要注意的是用gets来读取,当该串为空时,输出YES
代码实现:
1 #include<stdio.h> 2 #include<string.h> 3 int f(char a[],int l); 4 5 int main() 6 { 7 char a[151]; 8 int T; 9 10 scanf("%d",&T); 11 getchar(); 12 while(T--) 13 { 14 gets(a); 15 int l=strlen(a); 16 if(l==0 || f(a,l))//空 17 printf("Yes\n"); 18 else 19 printf("No\n"); 20 } 21 return 0; 22 } 23 24 int f(char a[],int l) 25 { 26 char s[151]; 27 int i,top=0; 28 for(i=0;i<l;i++) 29 { 30 s[top++]=a[i]; 31 if(s[top-1]==')' && s[top-2]=='(') 32 top-=2; 33 if(s[top-1]==']' && s[top-2]=='[') 34 top-=2; 35 } 36 if(top==0) 37 return 1; 38 else 39 return 0; 40 }
易错分析:
注意读题,根据题目来写
欢迎交流,共同进步——