python数据结构——栈的应用之匹配符号

数据结构之匹配符号

要求:从左到右读取一个符号串,然后判断符号是否匹配
分析:之前的匹配括号只是匹配符号的一个特例,而这里的符号还包括了{}[],只要保证左右符号匹配,就可以混用这些符号
操作:与之前的匹配符号类似,再遇见一个左符号时,我们将其放入栈中,但区别在于:当出现一个右括号时,我们需要检测其类型是否与栈顶的左符号匹配。如果不匹配,那么整个符号就不匹配。同样,当处理完整个符号串栈必须是空的,否则不匹配。
代码如下:

from pythonds.basic import Stack
def parchecker(symbolstring):
    s=Stack()#实例化一个栈的对象
    balanced=True
    index=0
    while index<len(symbolstring) and balanced:#遍历你输入的符号
        symbol=symbolstring[index]
        if symbol =="({[":
            s.push(symbol)
        else:#else后面为遇见右括号的操作
            if s.isEmpty():#如果栈是空的,可能是第一个是右符号。排除刚上来就是右符号
                balanced=False
            else:
                top = s.pop()#删除栈顶的元素,并传递给top变量(返回顶端元素)
                if not matches(top,symbol):#如果栈顶的元素(top)和下一个遇到的右符号(symbol)不匹配,匹配失败
                    balanced=False
        index =index+1            
        
    if balanced and s.isEmpty():#遍历完符号,如果栈是空的,那么匹配正确
        return True
    else:
        return False
def matches(open,close):#判断同种括号的匹配情况,注意内部每个参数是一个字符
    opens="({["
    closers=")}]"
    return opens.index(open)==closers.index(close)
print(parchecker("((((())))))()"))

这里有最详细的代码解释,不懂可以继续提问哦!
如果你觉得有用就点个👍呗!!
关注我,带你学习更多数据结构知识!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值