【CODE[VS]】2058--括号序列

题目描述 Description

定义满足以下规则字符串为规则序列,否则不是规则序列:
1.空序列是规则序列;
2.如果S是规则序列,那么(S),[S],{S}和<S>也是规则序列;
3.如果A和B都是规则序列,那么AB也是规则序列。

例如,下面的字符串都是规则序列:
(),[],(()),([]),()[],()[()],{{}}<>,([]<>{{}}),<<{}>>

而以下几个则不是:
(,[,],)(,()),([(),<<,{(}),<{}>)

现在,给你一些由"("、")"、"["、"]"、"{"、"}"、"<"、">"构成的字符串,请判断该字符串是否为规则序列。

输入描述 Input Description

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

输出描述 Output Description

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

样例输入 Sample Input

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

样例输出 Sample Output

TRUE
FALSE

数据范围及提示 Data Size & Hint

对于40%数据,有N=1,0<L<=20;
对于80%数据,有0<N<=5,0<L<=10^3;
对于100%数据,有0<N<=10,0<L<=2*10^6。


#include <iostream>
#include <string>
#include <stack>
using namespace std;

char cvt(char n){
    if(n == '>'){
        return '<';
    }
    else if(n == '}'){
        return '{';
    }
    else if(n == ')'){
        return '(';
    }
    else if(n == ']'){
        return '[';
    }
}

int main(){
    cin.tie(NULL);
    ios::sync_with_stdio(false);
    int n, i, cnt1, cnt2;
    bool flag;
    char ch;
    string inp;
    stack<char> a;
    cin >> n;
    cin.ignore();
    while(n--){
        flag = false;
        getline(cin, inp);
        for(i = 0; i < inp.size(); i++){
            if(inp[i] == '(' || inp[i] == '[' || inp[i] == '<' || inp[i] == '{'){
                a.push(inp[i]);
            }
            if(inp[i] == ')' || inp[i] == ']' || inp[i] == '>' || inp[i] == '}'){
                if(!a.empty() && cvt(inp[i]) == a.top()){
                    a.pop();
                }
                else{
                    flag = true;
                    break;
                }
            }
        }
        if(!flag && !a.empty()){
            flag = true;
        }
        if(flag){
            cout << "FALSE" << endl;
        }
        else{
            cout << "TRUE" << endl;
        }
        while(!a.empty()){
            a.pop();
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值