STL练习之堆栈 括号序列

 

问题 G: 括号序列

时间限制: 1.000 Sec  内存限制: 128 MB
提交 状态

题目描述

定义满足以下规则字符串为规则序列,否则不是规则序列:
1.空序列是规则序列;
2.如果S是规则序列,那么(S),[S],{S}和<S>也是规则序列;
3.如果A和B都是规则序列,那么AB也是规则序列。
例如,下面的字符串都是规则序列:
(),[],(()),([]),()[],()[()],{{}}<>,([]<>{{}}),<<{}>>
而以下几个则不是:
(,[,],)(,()),([(),<<,{(}),<{}>)
现在,给你一些由"("、")"、"["、"]"、"{"、"}"、"<"、">"构成的字符串,请判断该字符串是否为规则序列。

输入

第一行:一个正整数N(0<N≤10),表示测试数据组数;
接下来N行:每行一个括号序列,长度不超过L(0<L≤2*106)。

输出

共N行:对于每一个括号序列,判断其是否规则。符合规则输出YES,否则输出NO。

样例输入 Copy

2
{()}<<>>
{{{{{}}}}

样例输出 Copy

YES
NO

涉及知识点:

栈的运用!

#include<bits/stdc++.h>
#include<stack>
using namespace std;
bool khxl(string s)
{
    stack<char> stk;
    for(int i=0; i<s.size(); i++)
    {
        if(s[i] == '(')
            stk.push(')');
        else if(s[i] == '[')
            stk.push(']');
        else if(s[i] == '{')
            stk.push('}');
        else if(s[i]=='<')
            stk.push('>');
        else
        {
            if(stk.empty() || s[i] != stk.top())
                return false;
            stk.pop();
        }
    }
    return stk.empty();
}
int main()
{

    int n;
    cin>>n;
    string s;
    for(int i=0; i<n; i++)
    {
        cin>>s;
        if(khxl(s))
        {
            cout<<"YES"<<endl;
        }
        else
        {
            cout<<"NO"<<endl;
        }
    }

    return 0;
}

上一篇:Photoshop 打造超酷的放射字效果


下一篇:二、搭建k8s集群