栈应用之 括号匹配问题(Python 版)
栈应用之 括号匹配问题(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 版)的更多相关文章
- 利用栈实现括号匹配(python语言)
原理: 右括号总是与最近的左括号匹配 --- 栈的后进先出 从左往右遍历字符串,遇到左括号就入栈,遇到右括号时,就出栈一个元素与其配对 当栈为空时,遇到右括号,则此右括号无与之匹配的左括号 当最终右括 ...
- jzyzoj 栈——P1148:括号匹配加强版
括号匹配加强版 描述 Description 对于一个由(,),[,]括号组成的字符串,求出其中最长的括号匹配字串. 具体来说,满足如下条件的字符串成为括号匹配的字符串: (1) (),[] 是括号匹 ...
- C数据结构-栈和队列,括号匹配举例---ShinePans
1.栈和队列是两种特殊的线性表 运算操作被限定仅仅能在表的一端或两端插入,删除元素,故也称它们为限定的线性表结构 2.栈的基本运算 1).Stackinit(&s) 构 ...
- 牛客国庆集训派对Day1:J:Princess Principal(栈模拟求括号匹配)
题目描述 阿尔比恩王国(the Albion Kingdom)潜伏着一群代号“白鸽队(Team White Pigeon)”的间谍.在没有任务的时候,她们会进行各种各样的训练,比如快速判断一个文档有没 ...
- leetcode题解:Valid Parentheses(栈的应用-括号匹配)
题目: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the ...
- 第四章 栈与队列(c2)栈应用:括号匹配
- STL版 括号匹配(感觉不如之前自己用数组模拟的跑的快)
数据结构实验之栈四:括号匹配 Time Limit: 1000MS Memory limit: 65536K 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的 ...
- python栈--字符串反转,括号匹配
栈的实现: # 定义一个栈类 class Stack(): # 栈的初始化 def __init__(self): self.items = [] # 判断栈是否为空,为空返回True def isE ...
- Python面试题:使用栈处理括号匹配问题
括号匹配是栈应用的一个经典问题, 题目 判断一个文本中的括号是否闭合, 如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括 ...
随机推荐
- maven使用内嵌tomcat7
在web项目的pom.xml中添加如下: <build> <plugins> <plugin> <groupId>org.apache.tomcat.m ...
- 搭建web.py
输入以下命令:盘符切换: >>d: >>D:\LYFLYFLYF\python\web.py-0.37 >>python setup.py install 出现 ...
- HDU 6231
K-th Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Tot ...
- LINUX的文件按时间排序
转载 2014年12月29日 00:49:23 20298 > ls -alt # 按修改时间排序 > ls --sort=time -la # 等价于> ls -alt > ...
- ubuntu 安装node.js
- python 类与对象解析
类成员: # 字段 - 普通字段,保存在对象中,执行只能通过对象访问 - 静态字段,保存在类中, 执行 可以通过对象访问 也可以通过类访问 # ...
- vs配置SP++3.0
最近在研究信号处理的C语言算法,突然发现一个西安交大的师兄之前已经写出来了一个完整的库,同样是研究生三年,差别怎么这样大呢. 先从用轮子开始吧. 一.SP++3.0安装及测试 官网下载地址: http ...
- 科学计算三维可视化---Mlab基础(鼠标选取交互操作)
一:鼠标选取介绍 二:选取红色小球分析 相关方法:科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数) 1.小球场景初始化建立 import numpy as np from maya ...
- python---权限管理和菜单生成
一:表结构(共八张表) from django.db import models # Create your models here. class User(models.Model): userna ...
- 互斥锁 pthread_mutex_init()函数
Linux下为了多线程同步,通常用到锁的概念.posix下抽象了一个锁类型的结构:ptread_mutex_t.通过对该结构的操作,来判断资源是否可以访问.顾名思义,加锁(lock)后,别人就无法打开 ...