UVa 673 Parentheses Balance【栈】

题意:输入一个包含"()"和"[]"的序列,判断是否合法

用栈来模拟,遇到"(",“[”就入栈,遇到')',']'就取出栈顶元素看是否匹配,如果不匹配,则不合法

还有注意一下每次取出栈顶元素的时候判断栈是否为空,如果为空就要跳出循环

注意空串也是合法的串

 1 #include<iostream>  

 2 #include<cstdio>  

 3 #include<cstring> 

 4 #include <cmath> 

 5 #include<stack>

 6 #include<vector>

 7 #include<map> 

 8 #include<set>

 9 #include<queue> 

10 #include<algorithm>  

11 using namespace std;

12 

13 typedef long long LL;

14 const int INF = (1<<30)-1;

15 const int mod=1000000007;

16 const int maxn=100005;

17 char t[maxn];

18 

19 int main(){

20     int ncase;

21     scanf("%d",&ncase);

22     getchar();

23     while(ncase--){

24         stack<char> s;

25         gets(t);

26         int len=strlen(t);

27         int flag=1;

28         for(int i=0;i<len;i++){

29             if(t[i]=='('||t[i]=='[') s.push(t[i]);

30             

31         //    printf("s.size()=%d\n",s.size());

32             else  if(t[i]==')'){

33                 if(s.size()==0) {

34                     flag=0;

35                     break;

36                 }

37                 char ch=s.top();s.pop();

38                 if(ch!='(') flag=0;            

39             }

40             else{

41                 if(s.size()==0){

42                     flag=0;

43                     break;

44                 }

45                 char ch=s.top();s.pop();

46                 if(ch!='[') flag=0;

47             }

48             if(flag==0) break;

49         }

50         

51         if(s.size()!=0) flag=0;

52         if(flag) printf("Yes\n");

53         else printf("No\n");        

54     }

55     return 0;

56 }
View Code

 

你可能感兴趣的:(uva)