您的位置:首页 > 其它

UVA 673 Parentheses Balance

2017-01-13 21:25 330 查看
1.题目是栈的简单应用,但是由于其特殊的条件性,使得空字符串也满足条件,所以也带来了不少的麻烦

2.两种字符要放到同一个栈中去判断,也就是【(】)这种情况是错误的。。第一次由于没有注意到这一点导致WA了很久,

3.下面附上代码:

#include <iostream>

#include <algorithm>

#include <cstdio>

#include <cstring>

#include <string>

#include <stack>

using namespace std;

int main()

{

    int T;char sign;

    cin>>T;

    cin.get();

    while(T--)

    {

        string s="";

        stack<char> one;

        one.push('#');

        bool flag=true;

        if((sign=cin.get())=='\n')

            printf("Yes\n");

        else

        {

            s=sign+s;

            while((sign=cin.get())!='\n')

                s=s+sign;

            //cout<<s<<endl;

            for(int i=0;i<s.length();i++)

            {

                if(s.at(i)=='(')

                    one.push('(');

                else if(s.at(i)=='['){

                    one.push('[');

                }

                else if(s.at(i)==')')

                {

                    if(one.top()=='(')

                        one.pop();

                    else{

                        flag=false;break;

                    }

                }

                else if(s.at(i)==']')

                {

                    if(one.top()=='[')

                        one.pop();

                    else{

                        flag=false;break;

                    }

                }

            }

            //cout<<one.top()<<endl;

            if(one.top()!='#')

                flag=false;

            if(flag)

                printf("Yes\n");

            else

                printf("No\n");

        }

    }

    //system("pause");

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: