python 括号匹配 栈_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获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值