ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

STL练习之堆栈 括号序列

2022-02-05 14:01:35  阅读:176  来源: 互联网

标签:括号 STL stk 序列 int 字符串 规则 堆栈


 

问题 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;
}

标签:括号,STL,stk,序列,int,字符串,规则,堆栈
来源: https://blog.csdn.net/weixin_63958709/article/details/122789983

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有