美文网首页
Python面试题:使用栈处理括号匹配问题

Python面试题:使用栈处理括号匹配问题

作者: 韩志超 | 来源:发表于2019-02-22 00:32 被阅读15次

括号匹配是栈应用的一个经典问题,

题目
判断一个文本中的括号是否闭合,
如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括号是否闭合

思路

  1. 使用栈后进先出的原则, 当字符是([{之一时, 入栈
  2. 当字符是)]}之一时, 判断栈顶与当前字符是否是一对,
  3. 如果匹配, 弹出该括号(该括号匹已封闭), 继续判断下一个字符
  4. 如果不匹配, 直接return False

相关代码

#!/usr/bin/python3

text = "({[({{abc}})][{1}]})2([]){({[]})}[]"


def is_closed(text:str) -> bool:  
    """
    判断文本中括号是否封闭
    :param:text 包含括号的文本字符串
    :returns: True无括号或所有括号全部封闭
                   False 存在括号不封闭
    """
    stack = []  # 使用list模拟栈, stack.append()入栈, stack.pop()出栈并获取栈顶元素
    brackets = {')':'(',']':'[','}':'{'}  # 使用字典存储括号的对应关系, 使用反括号作key方便查询对应的括号
    for char in text:
        if char in brackets.values():   # 如果是正括号,入栈
            stack.append(char)
        elif char in brackets.keys():  # 如果是反括号
            if brackets[char] != stack.pop():  # 如果不匹配弹出的栈顶元素
                return False
    return True

print(is_closed(text))

注:

  1. 手写代码时建议尽量遵循PEP8规范, 写出清晰高效的代码
  2. 返回bool类型的用is_开头
  3. 建议写上标准的docstring注释(其他 # 注释不用写)
  4. 注意优化算法

更多学习资料请加添加作者微信:lockingfree获取

相关文章

  • Python面试题:使用栈处理括号匹配问题

    括号匹配是栈应用的一个经典问题, 题目判断一个文本中的括号是否闭合,如: text = "({[({{abc}})...

  • 20. 有效的括号

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

  • 数据结构与算法之栈(四)

    一 目录 栈的介绍 栈的接口设计 栈的应用 - 浏览器前进后退 栈的使用 - 匹配有效括号 栈相关面试题 二 简介...

  • chap3-栈和队列

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

  • 20. Valid Parentheses

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

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

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

  • (栈)括号匹配问题

    c语言版

  • 栈、队列解决问题

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

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

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

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

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

网友评论

      本文标题:Python面试题:使用栈处理括号匹配问题

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