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:                                       #若果是右括号
            if s.isEmpty():
                balanced=False                      #如果栈是空的,则无法匹配直接Flase,这样第一次遇见“)”就是不对
            else:
                s.pop()                             #栈不是空的,就删除顶部元素,这样一对括号就对应了
        index =index+1                              #通过加一遍历你的每个输入
    if balanced and s.isEmpty():                    #当while循环完的时候,如果balanced=True并且栈
    #是空的,那么就对了,显然第一个若果是右括号就不对
        return True
    else:
        return False
print(parchecker("((((())))))()"))

代码有详细的解释。

如果内容对你有帮助就点个👍呗!!
关注我,领略更多数据结构方面的知识!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值