括号匹配问题 python解法(栈)

  括号匹配问题可以说是栈的经典运用了 我们可以遍历输入的字符串如果遇到前半个括号如“(,{,[ ” 就将它们压入栈,遇到后半个括号就弹出栈顶元素查看是否匹配。

但是python并没有栈,这里提供两种办法一种是利用列表来模拟栈,另一种是用queue模块中的 LifoQueue 来当栈使用。

接下来上代码:

from queue import LifoQueue

str = input()

def panduan(str):
    sta = LifoQueue()
    s1 = {'[', '(', '{'}
    s2 = {']', '}', ')'}
    dic = {'[': ']', '{': '}', '(': ')'}

    for c in str:
        if c in s1:
            sta.put(c)
        elif c in s2:
            try:
                if dic[sta.get()] == c:
                    continue
                else:
                    return False
            except:
                return False
    return True



def panduan1(str):
    sta = list()
    s1 = {'[', '(', '{'}
    s2 = {']', '}', ')'}
    dic = {'[': ']', '{': '}', '(': ')'}

    for c in str:
        if c in s1:
            sta.append(c)
        elif c in s2:
            try:
                if dic[sta.pop()] == c:
                    continue
                else:
                    return False
            except:
                return False
    return True

print("YES" if panduan(str) else "NO")   
print("YES" if panduan1(str) else "NO")

 

 

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FarawayTraveler_Yuch

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值