姜璟 发表于 2022-10-30 15:42:32

有一个测试点没过

本帖最后由 姜璟 于 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:09:40

本帖最后由 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 的判定结果显然是错的

姜璟 发表于 2022-10-30 16:30:03

jackz007 发表于 2022-10-30 16:09
这个题配合字典 + 列表非常简单

      运行实况:


题目里规定这样是正确的{:10_254:}

jackz007 发表于 2022-10-30 16:43:15

姜璟 发表于 2022-10-30 16:30
题目里规定这样是正确的

         完全不可能,括号必须同类型顺序成对匹配,这样才会有意义,否则,就是乱套!

jackz007 发表于 2022-10-30 17:05:11

本帖最后由 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:22:38

本帖最后由 阿奇_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()

kogawananari 发表于 2022-10-31 01:57:04

原本以为你这个题目考的是栈结构,仔细一看 考的是贪心 (如果需要输出多少对而不是YesNo)
页: [1]
查看完整版本: 有一个测试点没过