下面的一段python代码是检查括号匹配问题。
zip(brackets[::2], brackets[1::2])返回的是 (('(', ')'), ('[', ']'), ('{','}'))
代码使用两个字典,count_left和right_for_left。
初始的时候 count_left = {'(' : 0 , '[' : 0, '{' : 0} --- key是左边的括号,value是括号出现的次数
right_for_left = {')':'(', ']':'[', '}':'{'} --- key是右边的括号,value是对应的左边的括号
接下来对text进行遍历,如果当前字符在count_left的key(if c in count_left 相当于 if c in count_left.keys())中,则对应的括号次数加一; 如果当前字符在right_for_left的key中,而此时当前字符对应的做括号在count_left中出现的次数为0,即没有出现左括号,但是出现了右括号,则直接返回False,表明括号不匹配,否则将对应的左括号在count_left中出现的次数减一,表示一次匹配。
最后判断count_left里面是不是所有的value为0,如果均为0,则返回True,否则返回False
def is_banlance(text, brackets = "()[]{}"):
count_left = {}
right_for_left = {}
for left, right in zip(brackets[::2], brackets[1::2]):
count_left[left] = 0
right_for_left[right] = left
for c in text:
if c in count_left:
count_left[c] += 1
elif c in right_for_left:
if count_left[right_for_left[c]] == 0:
return False
else:
count_left[right_for_left[c]] -=1
return not any(count_left.values())
print(is_banlance("()xxx((xxx)){yy}[[]]"))
分享到:
相关推荐
c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题
利用栈完成括号匹配问题 从一个文本中读取文件 然后在程序中进行括号的匹配
用栈实现括号匹配。而且使得操作尽可能简单,所以就之用了基本的进,出栈的操作。
C语言括号匹配问题解决方法,给定一个输入的字符串,包含括号(和),能够找出(和)的个数,并指出(或者)不正确的位置。
c++使用堆栈实现括号匹配问题
输入N对括号 检查是否匹配, 如果不匹配则给出不匹配的提示
这是典型的动态规划求解最长括号匹配问题。
《数据结构》中的括号匹配问题的C#语言代码实现,供参考。
利用简单的栈操作实现的括号匹配问题,比较简单
括号匹配
基于数据结构的括号匹配问题,有源代码,文档,执行文件等
NOI/NOIP “栈”这种数据结构中一种典型题目 括号匹配 的ppt讲解
假设在表达式中允许有三种括号:圆括号、方括号...要求设计测试数据,如果在表达式中括号使用正确,输出结果为“此表达式中括号匹配合法”,否则输出结果为“此表达式中括号匹配不合法”,#为表达式的起始和结束标志。
给定一个字符串,其中的字符只包含三种...括号匹配要求括号必须以正确的顺序配对,如 “{ [ ] ( ) }” 或 “[ ( { } [ ] ) ]” 等为正确的格式,而 “[ ( ] )” 或 “{ [ ( ) }” 或 “( { } ] )” 均为不正确的格式。
判断一个有左括号和右括号、以及其他ASCII字符组成的表达式是合法。...如果有*,则*可作为0个或者1个右括号,如果匹配则输出ok,不匹配则输出不匹配字符所在字符串中的具体位置。资源中包含详细源码+测试+visio流程图
【数据结构】括号匹配问题