问题标题: Parentheses Balance(括号平衡,UVA673) 求解:)

0
0
束礼熙
束礼熙
初级守护
初级守护

Parentheses Balance(括号平衡,UVA673)

题目描述

给定一个由括号()和[]组成的字符串,只有以下三种类型的字符串才认为是正确的:
1、字符串是空的
2、如果A和B是正确的,AB是正确的
3、如果A是正确的,(A)和[A]是正确的
编写一个程序,给定一个这种类型的字符串序列并检查它们的正确性。字符串的最大长度是128.

输入格式

第一行,一个整数N(N≤20),表示接下来将有N个字符串
接下来N行,每行一个字符串,字符串由()或者[]组成

输出格式

对于每个字符串输出一行,如果是正确输出'Yes',否则输出'No'

输入输出样列

输入样例1:

3 ([]) (([()]))) ([()[]()])()

输出样例1:

Yes No Yes

【耗时限制】1000ms 【内存限制】64MB

我用栈写的 不知道为啥20分:( 样例是对的

思路是:遇到左括号入栈 如果不是左括号就判断右括号是否匹配并且栈是否为空 如果匹配不了而且栈空了 就输出No 

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    string s;
    while(n--)
    {
        stack <char> a;
        cin>>s;
        bool flag=1;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='('||s[i]=='[')
                a.push(s[i]);
            else
            {
                if(a.empty()||(s[i]==']'&&a.top()!='[')||(s[i]==')'&&a.top()!='('))
                {
                    flag=0;
                    continue;
                }
                a.pop();
            }
        }
        if(a.empty()&&flag)
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
    return 0;
}

 

束礼熙在2021-02-01 22:10:14追加了内容

输入输出样例是:有换行

束礼熙在2021-02-01 22:24:55追加了内容

https://www.luogu.com.cn/problem/UVA673这里的题


0
0
我要回答