python括号匹配o(1)复杂度_Python面试题:使用栈处理括号匹配问题

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

题目

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

如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括号是否闭合

思路

使用栈后进先出的原则, 当字符是([{之一时, 入栈

当字符是)]}之一时, 判断栈顶与当前字符是否是一对,

如果匹配, 弹出该括号(该括号匹已封闭), 继续判断下一个字符

如果不匹配, 直接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))

注:

手写代码时建议尽量遵循PEP8规范, 写出清晰高效的代码

返回bool类型的用is_开头

建议写上标准的docstring注释(其他 # 注释不用写)

注意优化算法

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

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

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

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

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

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

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

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

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

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

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

Python 用栈判断括号匹配

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

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

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

JAVA栈实例—括号匹配

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

python实现括号匹配

1.用一个栈[python中可以用List]就可以解决,时间和空间复杂度都是O(n) # -*- coding: utf8 -*- # 符号表 SYMBOLS = {'}': '{', ']': '[ ...

随机推荐

最短路径——Floyd-Warshall算法

Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3). 我们平时所见的Floyd算法的一般形式如下: void Floyd() { int i, ...

UIButton

//UIButton->UIControl->UIView //UIControl 带有操作的控件都是继承于它的 //UIButton  实例化  类方法实例化 //实例化时没有位置及大小 ...

DOM--3 DOM核心和DOM2 HTML(2)

核心Node对象 由于继承扩展的关系,DOM中大部分对象会有Node对象的属性和方法,其中包括: nodeName DOM2核心中规定的每种nodeType预期的nodeName值 对象 返回值 El ...

Linux gcc命令

一.简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objectiv ...

怎样删除在Github中创建的项目

像我这种刚開始学习的人总会不可避免的创建了一些測试性的项目.随后自然就是要删除了.那么该怎样删除呢? 你此刻可能处于这个界面: 也可能处于这个界面: 假设是第一个界面直接点击右側的"Sett ...

idea工具maven生命周期clean,compile,install,package区别

idea工具maven projects里面有9种生命周期,今天刚好遇到,顺便分享下自己的理解.生命周期是包含在一个项目构建中的一系列有序的阶段.最常用的两种打包方法:一:clean,package( ...

【Java提高】---通过UUID、SHA-1、Base64组合加密

通过UUID.SHA-1.Base64组合加密 该篇文章实现的最终效果是: 1)加密是不可逆的. 2)相同字符串加密产生后的字符串都不一样 3)所以要想比较两个字符串是否相等,需要用已经加过密的字符串 ...

spring中的springSecurity安全框架的环境搭建

首先在web.xml文件中配置监听器和过滤器

张鑫旭:Promise异步编程模式

参考文章: http://www.zhangxinxu.com/wordpress/2014/02/es6-javascript-promise-%E6%84%9F%E6%80%A7%E8%AE%A4 ...

洛谷 P1325 雷达安装 解题报告

P1325 雷达安装 题目描述 描述: 假设海岸线是一条无限延伸的直线.它的一侧是陆地,另一侧是海洋.每一座小岛是在海面上的一个点.雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围d ...

你可能感兴趣的:(python括号匹配o(1)复杂度_Python面试题:使用栈处理括号匹配问题)