【算法】括号匹配

思路

== 左边的括号:[ { (,右边的括号:] } ) ==

括号匹配:一个左边括号(如"(“)与最近的右边括号相对应(此时应为”)"),这很符合栈的性质(后进先出),利用栈来实现匹配的过程如下:

遇到左侧括号,将其对应的右侧括号入栈;遇到右侧括号,从弹出栈顶元素。遍历完成,若括号全部匹配则栈为空。

** 括号不匹配的情况**

情况一:左边的括号多了,如:{[()],说明在栈顶元素没有完全弹出,遍历结束栈不为空;

情况二:右边括号多了,如:([])),说明栈中没有足够多的元素可以弹出,弹出栈顶元素时需判断栈是否有元素;

情况三:左右侧括号不匹配,如([}),说明弹出的栈顶元素与比较元素不相等,弹出元素要加值比较。

class Solution:
    def isValid(self, s: str) -> bool:
        stack = [] 
        for i in s:
        #入栈
            if i == '(':
                stack.append(')')
            elif i== '[':
                stack.append(']')
            elif i == '{':
                stack.append('}')
           #弹出栈顶元素     
            elif not stack or stack[-1] != i: #栈顶在列表末尾
                return False 
            else:
                stack.pop()
        #栈空判断
        return True if not stack else False
        #完全匹配 ,栈应该为空
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值