leetcode 20.有效的括号

20.有效的括号
括号有效性也是非常常见的题目了,在c++里面基本会用到stack来解决这个问题.在python里面也是类似的思路.
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:

输入:s = “()”

输出:true

示例 2:

输入:s = “()[]{}”

输出:true

示例 3:

输入:s = “(]”

输出:false

示例 4:

输入:s = “([])”

输出:true

示例 5:

输入:s = “([)]”

输出:false

class Solution:
    def isValid(self, s: str) -> bool:
        q = deque() # 当然,栈也可以直接通过list,因为append和pop就够了
        for char in s:
            if char=='(' or char=='[' or char=='{':
                # 左括号入栈
                q.append(char)

            else:
                # 检查栈是否为空和none
                if not q:
                    return False
                # 右括号判断
                chr = q.pop()
                if char==')' and chr!='(' or \
                    char==']' and chr!='[' or \
                    char=='}' and chr!='{':
                    return False # 注意,这里只能判断false

        return not q # 如果栈为空,说明都匹配完毕了

易错点很多,比如判断的时候判断的都是false的情况,只有匹配完毕并且栈空了之后才能说都匹配,匹配的条件也需要注意不要写错了.
所以还有更加方便的方式,通过哈希表来写对应的匹配,此时需要右括号作为key,左括号作为value

class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        maping = {'}':'{', ')':'(', ']':'['}
        for char in s:
            if char in maping:# 找的是key键,如果右括号
                if stack: # 如果栈空,说明一来就是右括号的情况,不可能匹配
                    top = stack.pop()
                    if maping[char] != top:
                        return False
                else:
                    return False
            else:
                stack.append(char)
        return not stack

也是要注意一下哈希集合是怎么进行in的,如果找到了右括号后也是一样要弹出左括号的,然后看能否匹配,判断的条件必须是不能匹配,也就是maping[char]!=top后return False的情况

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白云千载尽

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

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

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

打赏作者

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

抵扣说明:

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

余额充值