括号匹配。 以下代码来自mooc课程:数据结构与算法(Python版)北京大学 自己写了注释,方便自己回看。
# 定义一个栈的类 class Stack: def __init__(self): # 初始化一个栈 self.items = [] def isEmpty(self): # 判断栈是否为空 return self.items == [] def push(self, item): # 入栈 self.items.append(item) def pop(self): # 出栈 return self.items.pop() def peek(self): # 索引 return self.items[len(self.items)-1] def size(self): # 获取栈元素的个数 return len(self.items) def parChecker(symbolString): s = Stack() # 创建一个空栈 balanced = True # 平衡标志 index = 0 # 一开始的索引值为0 while index < len(symbolString) and balanced: # 索引未到结尾并且此时还是平衡状态 symbol = symbolString[index] # 将索引到的值赋给symbol变量 if symbol in "([{": s.push(symbol) # 如果是左括号,则加入栈 else: # 否则,即是右括号 if s.isEmpty(): # 判断栈是否空,如果栈空,此时未能匹配成功 balanced = False else: # 如果栈不空,则弹出 top = s.pop() # 将弹出的值赋给top变量 if not matches(top,symbol): # 如果弹出的右括号和左括号未能匹配,则匹配失败,不平衡 balanced = False index = index + 1 # 继续往下索引 if balanced and s.isEmpty(): # 最后如果平衡并且栈空,则括号匹配成功 return True else: # 否则匹配失败 return False def matches(open,close): opens = "([{" closers = ")]}" return opens.index(open) == closers.index(close) print(parChecker('{{([][])}()}')) print(parChecker('[{()]')) # 输出结果 # True # False