673 - Parentheses Balance

  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
 
 

题意:给一堆括号,让你判断是否能够组合

就是简单的栈的利用,把左半边的括号入栈,遇到右半边与其匹配。不过要注意到最后要判断是否为空栈。还有就是字符串当中可能有空格。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<stack>
#include<cstring>
using namespace std;
int main ()
{
    int n,len,i;
    char str[130],temp;
    cin>>n;
    getchar();
    while(n--)
    {
        bool flag=true;
        stack<char> s;
        gets(str);
        len=strlen(str);
        for (i=0; i<len; i++)
            if (str[i]==' ') ;
            else
            {
                if (!flag) break;
                if (str[i]=='(' || str[i]=='[') s.push(str[i]);
                else
                {
                    if (s.empty())
                    {
                        flag=false;
                        break;
                    }
                    else
                    {
                        temp=s.top();
                        s.pop();
                        if ((str[i]==')' && temp=='(') || (str[i]==']' && temp=='[' ) ) ;
                        else
                        {
                            flag=false;
                            break;
                        }
                    }
                }
            }
        if (!s.empty()) flag=false;
        if (flag) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}



你可能感兴趣的:(算法,String,STL,uva)