3_leetcode力扣_有效的括号_Easy

题目

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

难度

简单

相关知识

哈希表 栈

题解

  • 错误
    在这里插入图片描述
class Solution:
    def isValid(self, s: str) -> bool:
        if len(s)% 2 == 1:
            return False 
        stack = ['?']
        dic = {'(':')','{':'}','[':']','?':'?'}
        for i in s:
            if i in dic:
                stack.append(i)
            elif dic[stack.pop()]!= i :
                return False
        return True

错因:字符串 s 以左括号结尾时: 此情况下可以正常遍历完整个 s,但 stack 中遗留未出栈的左括号;因此,最后需返回 len(stack) == 1,以判断是否是有效的括号组合。

  • 修正
    在这里插入图片描述
class Solution:
    def isValid(self, s: str) -> bool:
        # 因为配对,所以若字符串长度为奇数,必然不有效,可直接提前返回false
        if len(s)% 2 == 1:
            return False 
        # 根据有效括号原则:后面的左括号需要先闭合。符合栈规则,考虑构建辅助栈stack

        # 根据有效括号原则:括号类型需匹配。考虑初步构建dic = {'(':')','{':'}','[':']'}
        # 发现如果右括号出现早于/多于左括号,栈为空,此时.pop会报错
        # 所以需要给辅助栈赋一个无意义的初值'?',避免报错
        stack = ['?']
        dic = {'(':')','{':'}','[':']','?':'?'} # 同时修改dic,为'?'匹配value
        for i in s:
            if i in dic:
                stack.append(i)
            elif dic[stack.pop()]!= i :
                return False
        #return True 直接返回ture会出现,整体无右括号,栈中全是左括号的情况,也是非有效的。
        return len(stack) == 1 #若结束循环,栈中仅剩初始值'?',证明全部匹配,则有效。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值