首页 > 代码库 > UVA 637 Parentheses Balance(栈)

UVA 637 Parentheses Balance(栈)

题目代号:HDU 1237

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=103&page=show_problem&problem=614

题目原文:

Parentheses Balance

You are given a string consisting of parentheses () and []. A string of this type is said to be correct:
(a) if it is the empty string
(b) if A and B are correct, AB is correct,
(c) if A is correct, (A) and [A] is correct.
Write a program that takes a sequence of strings of this type and check their correctness. Your
program can assume that the maximum string length is 128.


Input
The file contains a positive integer n and a sequence of n strings of parentheses ‘()’ and ‘[]’, one string
a line.


Output
A sequence of ‘Yes’ or ‘No’ on the output file.


Sample Input
3
([])
(([()])))
([()[]()])()


Sample Output
Yes
No
Yes

 

题目大意:输入一个包含()和[]的括号序列,判断是否合法。1.空串合法;2.如果A和B都合法,则AB合法;3.如果A合法则(A)和[A]都合法。

栈的练习题

 

通过代码:

# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# include <iostream>
# include <fstream>
# include <vector>
# include <queue>
# include <stack>
# include <map>
# include <math.h>
# include <algorithm>
using namespace std;
# define pi acos(-1.0)
# define mem(a,b) memset(a,b,sizeof(a))
# define FOR(i,a,n) for(int i=a; i<=n; ++i)
# define For(i,n,a) for(int i=n; i>=a; --i)
# define FO(i,a,n) for(int i=a; i<n; ++i)
# define Fo(i,n,a) for(int i=n; i>a ;--i)
typedef long long LL;
typedef unsigned long long ULL;

int main()
{
    int a,b,c,d,t;
    char ch,zhan[200];
    cin>>t;
    getchar();
    while(t--)
    {
        int top=-1;
        bool flag=true;
        while((ch=getchar())!=‘\n‘)
        {
            if(ch==‘(‘)
            {
                zhan[++top]=‘(‘;
            }
            else if(ch==‘[‘)
            {
                zhan[++top]=‘[‘;
            }
            else if(ch==‘)‘)
            {
                if(zhan[top]==‘(‘)
                {
                    top--;
                }
                else flag=false;
            }
            else if(ch==‘]‘)
            {
                if(zhan[top]==‘[‘)
                {
                    top--;
                }
                else flag=false;
            }
        }
        if(top>=0)flag=false;
        if(flag)cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}

  

UVA 637 Parentheses Balance(栈)