`

括号匹配问题

阅读更多

下面的一段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}[[]]"))
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics