classStack:def__init__(self):
self.items =[]defisEmpty(self):return self.items ==[]defpush(self, item):
self.items.append(item)defpop(self):
self.items.pop()defpeek(self):return self.items[-1]defsize(self):returnlen(self.items)defparChecker(symbolString):
s = Stack()
balanced =True
index =0while index <len(symbolString)and balanced:
symbol = symbolString[index]if symbol =="{":
s.push(symbol)elif symbol =="[":
s.push(symbol)elif symbol =="(":
s.push(symbol)elif symbol =="}":if s.peek()=="{":
s.pop()else:
balanced =Falseelif symbol =="]":if s.peek()=="[":
s.pop()else:
balanced =Falseelif symbol ==")":if s.peek()=="(":
s.pop()else:
balanced =Falseelif s.isEmpty():
balanced =False
index +=1if balanced and s.isEmpty():returnTrueelse:returnFalseprint(parChecker("{[()()]}"))
方法二:利用index函数,通过位置关系确定是否匹配
classStack:def__init__(self):
self.items =[]defisEmpty(self):return self.items ==[]defpush(self, item):
self.items.append(item)defpop(self):
self.items.pop()defpeek(self):return self.items[-1]defsize(self):returnlen(self.items)defparChecker(symbolString):
s = Stack()
balanced =True
index =0while index <len(symbolString)and balanced:
symbol = symbolString[index]if symbol in"([{":
s.push(symbol)else:if s.isEmpty():
balanced =Falseelse:
top = s.peek()if matches(top,symbol)==True:
s.pop()
index +=1if balanced and s.isEmpty():returnTrueelse:returnFalsedefmatches(left,right):
lefts ="([{"
rights =")]}"return lefts.index(left)== rights.index(right)#index() 返回字符串的位置print(parChecker("[{
{()()}}]"))