栈应用之 括号匹配问题(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 : 匹配成功什么也不做

最新文章

  1. Python成长笔记 - 基础篇 (十二)
  2. 《CLR via C#》读书笔记--基元类型、引用类型和值类型
  3. 让webapi只接受ajax请求
  4. 我所改造的JSocket适用于任何DELPHI版本
  5. js 模板引擎 - 超级强大
  6. Swift - 可选类型说明
  7. MVC源码分析 - 路由匹配
  8. sql-update语句多表级联更新
  9. Redis之(三)管理命令
  10. Java单例模式的实现
  11. Qt(MinGW版)在win7 64位上无法播放视频解决方案
  12. C# 【一】进程 , 线程 , 微线程 , 同步 , 异步 , 并发 , 并行 , 阻塞 , 非阻塞
  13. Vue基础之内部指令(下)
  14. Hibrenate之事务的理解以及代码编写
  15. SELinux简介(转载)
  16. Ubuntu 14.04 LTS 初装成
  17. bzoj4946: [Noi2017]蔬菜 神烦贪心
  18. vsftp安装与配置for Linux
  19. 4:7 Struts实现Ajax
  20. html页面中iframe导致JavaScript失效

热门文章

  1. 【Cf Edu #47 G】Allowed Letters
  2. java的序列化流和打印流
  3. Android Studio aidl文件路径自定义问题
  4. Activity的setResult方法
  5. Python之旅:并发编程之IO模型
  6. Qt 状态栏设置
  7. C++模版详解(-)
  8. lumen 增加视图路径
  9. html概括
  10. python 中的queue, deque