LeetCode20——有效的括号

题目:

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

解答:

处理括号匹配等一类的问题,一个行之有效的方法就是利用——栈。

我们知道栈有一个特性,那就是先进后出,或者说后进先出。观察有效的括号组合,可以发现有限的括号都是成对出现的,算法图如下:

算法:

1. 遍历字符串,如果遇到左边的括号('(', '[', '{'),将之压入栈中

2. 如果遇到右边的括号,就将栈中的栈顶元素弹出,然后判断是否匹配

3. 如果匹配,接着遍历

4. 如果不匹配,那么整个字符串就不是一个有效的括号组合,返回False

5. 遍历结束,如果栈是空的,那么字符串就是有效的括号组合,返回True,如果栈中还有元素,那么就不是一个有效的括号组合,返回False

代码:

def is_valid(s: str) -> bool:
    stack = []  # 栈
    dict = {')': '(', '}': '{', ']': '['}

    for i in s:
        if i in dict:
            r = stack.pop() if stack else "#"
            if r != dict[i]:
                return False
        else:
            stack.append(i)
    return not stack
posted @ 2020-01-15 17:47  叶聪  阅读(36)  评论(0)    收藏  举报