Leetcode算法——20、判断有效括号

76 篇文章 1 订阅

题目

给定一个字符串,只包含字符’(’, ‘)’, ‘{’, ‘}’, ‘[’ 和’]’,判断此字符串是否有效。

满足以下条件为有效:

  • 左括号必须有同样类型的右括号相匹配
  • 右括号匹配顺序必须和左括号相对应

注意:一个空字符串也是有效的。

Example 1:
Input: “()”
Output: true

Example 2:
Input: “()[]{}”
Output: true

Example 3:
Input: “(]”
Output: false

Example 4:
Input: “([)]”
Output: false

Example 5:
Input: “{[]}”
Output: true

思路

维护一个栈,每次遇到左括号便放进去,每次遇到右括号便pop一个左括号看是否与之对应。由于栈为后入先出,可以保证右括号的匹配顺序和左括号相对应。

如果遍历完字符串后,栈刚好变为空,则说明字符串是有效的。

python 实现

def isValid(s):
    """
    :type s: str
    :rtype: bool  
    """
    if not s:
        return True
    
    if len(s) % 2 == 1:
        return False
    
    left = {'(':')','{':'}','[':']'}
    stack = []
    for char in s:
        if char in left:
            stack.append(char)
        elif not stack or left[stack.pop()] != char:
            return False
    return not stack

if '__main__' == __name__:
    s = "([)]"
    print(isValid(s))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值