1. MyStack.py
class MyStack():
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 __str__(self):
return f'{self.items}'
2. par_match.py
from MyStack import MyStack
def par_math(str_par):
my_stack = MyStack()
balanced = True
indx = 0
while indx < len(str_par) and balanced:
symbol = str_par[indx]
if symbol in '([{':
my_stack.push(symbol)
else:
if my_stack.isEmpty():
balanced = False
else:
top = my_stack.pop()
if not matches(top, symbol):
balanced = False
indx = indx + 1
if balanced and my_stack.isEmpty():
return True
else:
return False
def matches(open, close):
opens = '([{'
closes = ')]}'
return opens.index(open) == closes.index(close)
if __name__ == '__main__':
str_par = '([{])'
res = par_math(str_par)
print(res)
3. 结果
False
4. 注意点
- 栈的push()与pop()操作由python列表实现。注意时间复杂度为O(1).
- 若symbol不为左括号且栈为空,说明匹配存在问题,return False。