括号序列 是否是 合法的
你需要判断一个 括号序列 是否是 合法的 。
一个字符串s是 合法的括号序列,当且仅当以下条件同时满足:
- 只包含这些字符:(, ), {, }, [, or ]
- 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)
最后一个规则即可