括号序列 是否是 合法的

 

你需要判断一个 括号序列 是否是 合法的 。
一个字符串s是 合法的括号序列,当且仅当以下条件同时满足:

  1. 只包含这些字符:(, ), {, }, [, or ]
  2. s是空串 || s是某个合法的括号序列左右用一对同类型括号括起来 || s是若干个合法的括号序列左右拼接而成

给你n个字符串,请判断每个字符串是否是一个 合法的括号序列

 

 

输入

第一行是一个整数n,表示有n个字符串需要判断。
接下来n行每行表示待判断的字符串。

n和每个字符串的长度都不超过1000。

输出

输出n行,第i行是YES或者NO,表示输入中的第i个串是否是 合法的括号序列

输入样例

3
{[()]}
{[(])}
{{[[(())]]}}

输出样例

YES
NO
YES

提示

第二个样例中,[]和()交叉了,所以不算是 合法的括号序列

 

 

 

import sys

input_l, n, c = [], 0, 0
for line in sys.stdin:
    if c == 0:
        n = int(line)
        c = 1
    else:
        input_l.append(line.replace('\n',''))
        if len(input_l) == n:
            break

def r0(s):
    if len(s) % 2 == 1:
        return False
    return True

def r1(s):
    ok_s_l = ['{', '[', '(', ')', ']', '}']
    s = s.replace(' ', '')
    for i in ok_s_l:
        s = s.replace(i, '')
    if s == '':
        return True
    return False


def r2(s):
    ok_p_l = ['{}', '[]', '()']
    while True:
        c=len(s)
        for i in ok_p_l:
            s = s.replace(i, '')
        if len(s)==0:
            return True
        if c==len(s):
            return False


res_l = []
for i in input_l:
    if not r0(i):
        res_l.append('NO')
    elif not r1(i):
        res_l.append('NO')
    elif not r2(i):
        res_l.append('NO')
    else:
        res_l.append('YES')

res = '\n'.join(res_l)

sys.stdout.write(res)

  

 

 

最后一个规则即可

 

posted @ 2018-08-08 00:09  papering  阅读(803)  评论(0编辑  收藏  举报