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

题目

判断一个文本中的括号是否闭合,

如: 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面试题:使用栈处理括号匹配问题的更多相关文章

  1. STL-stack和顺序栈实现括号匹配

    2018-11-11-14:28:31 1.顺序栈 下面是我用数组实现的顺序栈,包含的函数有出入栈,查看栈顶元素,栈的大小,栈是否空等函数,当栈空间不够用时,对应的数组会自动增长. /******** ...

  2. HDU 4283 You Are the One ★(进出栈的括号匹配性质:区间DP)

    题意 有一个队列,每个人有一个愤怒值D,如果他是第K个上场,不开心指数就为(K-1)*D.但是边上有一个小黑屋(一个FILO堆栈),可以一定程度上调整上场程序,求一种安排上场方案使得所有人的不开心指数 ...

  3. 利用栈实现括号匹配(python语言)

    原理: 右括号总是与最近的左括号匹配 --- 栈的后进先出 从左往右遍历字符串,遇到左括号就入栈,遇到右括号时,就出栈一个元素与其配对 当栈为空时,遇到右括号,则此右括号无与之匹配的左括号 当最终右括 ...

  4. C语言数据结构之栈:括号匹配

    括号匹配这是个很简单的题目,如果只有小括号,就模拟进栈和出栈的过程就行了: 注:输入时'@'作为结束标志 #include <stdio.h> int main() { freopen(& ...

  5. 利用顺序栈解决括号匹配问题(c++)-- 数据结构

    题目: 7-1 括号匹配 (30 分)   给定一串字符,不超过100个字符,可能包括括号.数字.字母.标点符号.空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入格式: 输入在一行 ...

  6. 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  7. Python 用栈判断括号匹配

    #!/usr/bin/python # -*- coding: UTF-8 -*- from pythonds.basic.stack import Stack def parChecker(symb ...

  8. 栈之括号匹配问题(java实现)

    假设表达式中只允许两种括号:().{}:正确表达顺序为:()或{}或({})或{({}{})}的形势:如{(}或(})或({)}的表达形势均不对.算法的设计思想: 出现左括弧则进栈: 出现右括弧则首先 ...

  9. JAVA栈实例—括号匹配

    import java.util.Stack; public class test { public static void main(String[] args){ System.out.print ...

随机推荐

  1. MongoDB环境搭建

    MongoDB系列第一课:MongDB简介 MongoDB系列第二课:MongDB环境搭建 MongoDB系列第三课:MongDB用户管理 MongoDB系列第四课:MongoDB数据库.集合.文档的 ...

  2. Java 私有构造函数的使用

    被private修饰的私有构造函数无法在其他类中调用,也就是该类无法在其他类中实例化. 这种情况常用的使用场景:1.单例模式: 2.防止实例化. 一.单例模式 单例模式是一种常用的设计模式,思想是单例 ...

  3. idea插件,配置

    1.插件 2.配置 1.去除double shift 全局搜索的功能,反正不符合我的习惯 Help -> Find Action  搜索 registry ,勾选 double.click.ha ...

  4. Matlab函数kmeans

    Matlab函数kmeans K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小. 使用方法:Idx=Kmeans(X,K)[Idx,C]=Km ...

  5. VBA学习资料分享-5

    工作中经常要从数据库把数据跑出来放到EXCEL上,才能进行下一步的操作,那么除了ADO,还有什么方法可以导入数据库数据呢? 推荐使用QueryTable对象 Dim qt As querytable ...

  6. 多线程之thread和runnable

    Runnanle方式可以避免Thread由于单继承特性带来的缺陷. Runnable代码可以被多个线程(thread实例)共享,适用于多个线程处理同一资源的情况. 线程的生命周期:创建,就绪,阻塞,运 ...

  7. js重点——作用域——简单介绍(一)

    一.作用域 定义:在js中,作用域为变量,对象,函数可访问的一个范围. 分类:全局作用域和局部作用域 全局作用域:全局代表了整个文档document,变量或者函数在函数外面声明,那它的就是全局变量和全 ...

  8. PHP 获取数组指定值的位置或下标

    <?php     //定义一个数组     $array = array(0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd');     // ...

  9. Python 嵌套列表解析

    将一个3*4矩阵转为4*3矩阵Matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],]afterMatrix = [[row[i] for ro ...

  10. Dart 面向对象 类 方法

    Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类. 面向对象编程(OOP)的三个基本特征是:封装.继承.多态 封装:封装是对象和类概念的主要特性. ...