19Matching Brackets括号匹配

问题

我们提供了包含4种类型的括号的字符串-圆(),方形[],卷曲{}和尖括号<>。 目的是检查方括号是否正确。 即任何开头的括号都应在字符串的更远处具有相同类型的结尾括号,并且括号对不应重叠,尽管它们可以嵌套:

input data:
4
(a+[b*c]-{d/3})
(a + [b * c) - 17]
(((a * x) + [b] * y) + c
auf(zlo)men [gy<psy>] four{s}

answer:
1 0 0 1

代码

def only_brackets(str):
    aim_list=["(",")","[","]","{","}","<",">"]
    str_list=list(str)
    result_list=[]
    for i in str_list :
        if i in aim_list:
            result_list.append(i)
    return "".join(result_list)
def is_valid(str):
    stack=[]
    parent_map={")":"(","]":"[","}":"{",">":"<"}
    for c in str:
        if c not in parent_map:
            stack.append(c)
        elif not stack or parent_map[c] !=stack.pop():
            return 0
    return not stack
num=input()
result=[]
for i in range(int(num)):
    lineinput=input()
    onlyBrackets=only_brackets(lineinput)
    answer=is_valid(onlyBrackets)
    result.append(int(answer))
print(*result)

在这里用到了堆栈的概念可以参考堆栈介绍
核心解决了以后在这里分了2步走,分别是第一步只保留括号,第二部来判断是否合乎标准,总结后希望以后都改成用函数接口的方式,方便后续修改也更为规范。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值