问题描述:
给定一个字符串文字,里面可能含有"()","[]","{}"三种
括号,判断字符串中的括号是否都成对出现***
思路分析:
如果括号正确匹配,肯定满足:
1、一对正确匹配的括号,一定先出现左括号,再出现右括号;
2、三种括号不会出现交叉现象。如“{【】{}()()}”,而不会出现类似“(【)】”的情况。
如果以人类思维方式取匹配,过程如下:
遇到左括号先暂时不管,遇到右括号再看前面出现的左括号是否匹配。(而且由于括号不会交叉,遇到右括号后,查找的一定是距离最近的一个左括号)
最前面(最先)出现的左括号最后比较,最近出现的左括号先比较。因此,我们可以考虑利用栈“先进后出”的特性。
当遇到一个左括号,让它入栈;遇到一个右括号,则比较栈顶元素是否与之匹配。
首先创建一个Stack类
class Stack:
def __init__(self):
self.__list = [] # 初始化列表,存储栈中元素。因为不需要外界访问,所以私有化。
def push(self, item): # 弹出栈顶元素
self.__list.append(item)
def peek(self):
return self.__list[len(self.__list) - 1]
def pop(self):
return self.__list.pop() # 列表的pop方法,默认返回最后一个元素
def is_empty(self): # 判断是否栈空
return self.__list == []
遇到右括号,如何表示栈顶元素与括号“匹配”呢?*
一种思路是用字典键值对先存储对应的匹配关系
def is_matched_brackets