括号匹配是栈应用的一个经典问题,
题目
判断一个文本中的括号是否闭合,
如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括号是否闭合
思路
([{
之一时, 入栈)]}
之一时, 判断栈顶与当前字符是否是一对,相关代码
#!/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))
注:
更多学习资料请加添加作者微信:lockingfree获取
原文:https://www.cnblogs.com/superhin/p/11454799.html