栈应用之 括号匹配问题(Python 版)
2024-09-24 18:44:41
栈应用之 括号匹配问题(Python 版)
检查括号是否闭合
- 循序扫描被检查正文(一个字符)里的一个个字符
- 检查中跳过无关字符(所有非括号字符都与当前处理无关)
- 遇到开括号将其压入栈
- 遇到闭括号时弹出当时的栈顶元素与之匹配
- 如果匹配成功则继续,发现匹配失败时则以检查失败结束
def check_parens(text) :
# 括号匹配检查函数,text 是被检查的正文串
parens = "(){}[]"
open_parens = "({["
opposite = {")":"(", "}":"{", "]":"["} def parentheses(text) :
# 括号生成器,每次调用返回text里的下一括号及其位置
i.text_len = 0,len(text)
while True :
while i < text_len and text[i] not in parens :
i += 1
if i >= text_len :
return
yield text[i],i
i += 1 st = SStack() # 创建栈 st for pr , i in parentheses(text) : # 对text里各括号和位置迭代
if pr in open_parens : # 开括号,压栈并继续
st.push(pr)
elif st.pop() != opposite[pr] : # 闭括号 若匹配失败就退出
print("Unmatching is found at ",i,"for",pr)
return False
# else : 匹配成功什么也不做
最新文章
- Python成长笔记 - 基础篇 (十二)
- 《CLR via C#》读书笔记--基元类型、引用类型和值类型
- 让webapi只接受ajax请求
- 我所改造的JSocket适用于任何DELPHI版本
- js 模板引擎 - 超级强大
- Swift - 可选类型说明
- MVC源码分析 - 路由匹配
- sql-update语句多表级联更新
- Redis之(三)管理命令
- Java单例模式的实现
- Qt(MinGW版)在win7 64位上无法播放视频解决方案
- C# 【一】进程 , 线程 , 微线程 , 同步 , 异步 , 并发 , 并行 , 阻塞 , 非阻塞
- Vue基础之内部指令(下)
- Hibrenate之事务的理解以及代码编写
- SELinux简介(转载)
- Ubuntu 14.04 LTS 初装成
- bzoj4946: [Noi2017]蔬菜 神烦贪心
- vsftp安装与配置for Linux
- 4:7 Struts实现Ajax
- html页面中iframe导致JavaScript失效