括号序列 是否是 合法的
你需要判断一个 括号序列 是否是 合法的 。
一个字符串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)
最后一个规则即可

浙公网安备 33010602011771号