有一个测试点没过
本帖最后由 姜璟 于 2022-10-30 15:42 编辑n=int(input())
while n!=0:
s=input()
s=list(s)
f=2
while(f!=1):
if len(s)%2!=0:
f=0
break
if '(' in s:
if ')' not in s:
f=0
break
else:
if s.index('(')>s.index(')'):
f=0
break
else: f=1
if ')' in s:
if '(' not in s:
f=0
break
if '[' in s:
if ']' not in s:
f=0
break
else:
if s.index('[')>s.index(']'):
f=0
break
else: f=1
if ']' in s:
if '[' not in s:
f=0
break
if '{' in s:
if '}' not in s:
f=0
break
else:
if s.index('{')>s.index('}'):
f=0
break
else: f=1
if '}' in s:
if '{' not in s:
f=0
break
if f==1:
print("YES",end='')
if f==0:
print("NO",end='')
n-=1
if n!=0:print()还有什么条件没想到吗 本帖最后由 jackz007 于 2022-10-30 16:17 编辑
这个题配合字典 + 列表非常简单
d , x = {'}' : '{' , ']' : '[' , ')' : '('} , []
for _ in range(int(input())) : x . append(input())
for s in x:
e , f = [] , True
for x in s:
if x in '{[(':
e . append(x)
else:
if not e or d != e . pop() :
f = False
break
print('Yes') if not e and f else print('No')
运行实况:
D:\\Python>python x.py
4
({})
{{}}
({[}])
}{
Yes
Yes
No
No
D:\\Python>
样例 3 的判定结果显然是错的 jackz007 发表于 2022-10-30 16:09
这个题配合字典 + 列表非常简单
运行实况:
题目里规定这样是正确的{:10_254:} 姜璟 发表于 2022-10-30 16:30
题目里规定这样是正确的
完全不可能,括号必须同类型顺序成对匹配,这样才会有意义,否则,就是乱套! 本帖最后由 jackz007 于 2022-10-30 18:28 编辑
姜璟 发表于 2022-10-30 16:30
题目里规定这样是正确的
d , x = {'}' : '{' , ']' : '[' , ')' : '('} , []
for _ in range(int(input())) : x . append(input())
for s in x:
e , f = [] , True
for x in s:
if x in '{[(':
e . append(x)
else:
if d in e : e . remove(d)
else :
f = False
break
print('Yes') if not e and f else print('No')
运行实况:
D:\\Python>python x.py
4
({})
{{}}
({[}])
}{
Yes
Yes
Yes
No
D:\\Python> 本帖最后由 阿奇_o 于 2022-10-30 18:23 编辑
# 思路:典型的入栈出栈问题
# 解决:
def f():
# n = int(input())
# ps =
ps = "({}),{{}},({[}]),}{,{(})[{(}])".split(',') # 方便测试,直接写测试用例
for p in ps:
cnt, ls = 0, [] # ls为"栈",cnt保存"对数"
for i in p:
# 入栈
if i in '{([': ls.append(i)
# 出栈
if i == '}' and '{' in ls: ls.remove('{'); cnt += 1
if i == ')' and '(' in ls: ls.remove('('); cnt += 1
if i == ']' and '[' in ls: ls.remove('['); cnt += 1
# print(p, f'\t--> Yes 共{cnt}对' if len(ls)==0 else '\t--> No', ) # 是否有效判断 方法一
print(p, f'\t--> Yes 共{cnt}对' if cnt==len(p)/2 else '\t--> No', ) # 方法二
# 注:如果只用方法二判断,实际上可以不进行出栈操作,即ls.remove()可省去,只用cnt统计好即可
f() 原本以为你这个题目考的是栈结构,仔细一看 考的是贪心 (如果需要输出多少对而不是YesNo)
页:
[1]