美文网首页
Python用栈解决括号匹配问题

Python用栈解决括号匹配问题

作者: 车湾里 | 来源:发表于2020-06-18 09:20 被阅读0次

极客时间上王争老师说:

关于“栈”,我有一个非常贴切的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个地依次取,不能从中间任意抽出。

后进者先出,先进者后出,这就是典型的“栈”结构。

括号匹配问题

课程中老师提到了栈在括号匹配中的应用

栈-括号匹配

Python 代码实现

其实栈,不用特别去定义一个类,就用 Python 的 list 就可以了。

入栈:就用 list 的 append() 方法,添加到 list 尾部

出栈:就用 list 的 pop() 方法,从 list 尾部取出一个

这样操作跟栈的后进先出,是同理的。

版本1

遇到左括号入栈,否则就从栈里面拿出来进行匹配


def isValid(s):

        stack = []

        brackets= {'{':'}','(':')','[':']'}   # 左括号当key, 右括号当value

        for ch in s:

            if ch in brackets: # 如果ch是左括号,则入栈

                stack.append(ch)

            elif not stack or ch != brackets[stack.pop()]:  # 如果ch是‘右括号’,那么用栈顶元素当值去取value,也就能找到对应的右括号;如果没有或匹配不上,失败

                return False

        return not stack   # 最后,判断stack是否为空,为空也是匹配成功

print(isValid('{()[]}'))

版本2

遇到右括号入栈,否则就从栈里面拿出来进行匹配

版本1和版本2的区别在于,括号组成的 map 的定义方式,和取元素的方式有一点点区别,具体看代码


def isValid(s):

        stack = []

        brackets= {

            '}':'{',

            ')':'(',

            ']':'['

        }   # 右括号当key, 左括号当value

        for ch in s:

            if ch not in brackets: # 如果ch不是右括号,则压栈

                stack.append(ch)

            elif not stack or brackets[ch]!=stack.pop():  # 如果ch是‘右括号’,那么栈顶元素一定可以找到与之对应的‘左括号’;如果没有,匹配失败

                return False

        return not stack   # 最后,判断stack是否为空,写法比较简洁

print(isValid('{[]()}'))

谢谢你的阅读~

题图:pixabay.com

参考资料:

极客时间:https://time.geekbang.org/column/article/41222

有效括号问题:https://www.cnblogs.com/wl413911/p/12923951.html

相关文章

  • Python用栈解决括号匹配问题

    栈 极客时间上王争老师说: 关于“栈”,我有一个非常贴切的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是...

  • 栈、队列解决问题

    栈解决括号匹配问题 一个字符串中包含小括号、中括号、大括号,判断该字符串中的括号是否匹配 ()()[]{} 匹配...

  • 力扣第20题:有效的括号

    经典的括号匹配问题,用stack解决。

  • chap3-栈和队列

    括号匹配问题 // 括号匹配,遇到 '\0' 结束// 遇到花、中、圆左括号进栈,遇到花、中、圆右括号检查栈顶元素...

  • 利用栈解决括号匹配问题

    遍历字符串,遇到左括号,入栈。遇到有括号,出栈。遍历完后,如果栈中还有元素就说明括号不匹配,否则匹配。 demo地...

  • 互联网秋招刷题leetcode总结——栈与队列

    栈 括号类问题 20. 有效的括号(easy) 遍历字符串,每次与栈顶括号进行匹配,匹配成功栈顶弹出,否则继续压入...

  • 20. 有效的括号

    自己解法 括号匹配问题,第一想法就是使用栈,左括号入栈,遇到匹配的右括号出栈,如果中间有不符合的右括号,直接返回f...

  • (栈)括号匹配问题

    c语言版

  • 2019-05-12(栈应用 括号匹配 leetcode 20

    括号匹配思路: 1、遇到左边的括号 进栈 ,2、遇到右边的括号获取原来栈 中栈顶元素,与刚遇到的值进行匹配,匹配成...

  • 20. Valid Parentheses

    使用栈数据结构: 遇到左括号,需要压栈。 遇到右括号,判断栈顶是否和当前右括号匹配;若不匹配则返回false,否则...

网友评论

      本文标题:Python用栈解决括号匹配问题

      本文链接:https://www.haomeiwen.com/subject/vimsxktx.html