LIFO栈(python实现)
class Empty(Exception):
"""Error attempting to access an element
from an empty container
"""
pass
class ArrayStack:
"""LIFO stack
"""
def __init__(self):
self._data = []
def __len__(self):
return len(self._data)
def is_empty(self):
return len(self._data) == 0
def push(self, e):
self._data.append(e)
def top(self):
if self.is_empty():
raise Empty('Stack is empty')
return self._data[-1]
def pop(self):
if self.is_empty():
raise Empty('Stack is empty')
return self._data.pop()
def is_matched(expr):
"""利用栈实现运算分隔符匹配算法
Args:
expr ([String]): [算式]
"""
lefty = '({['
righty = ')}]'
S = ArrayStack()
for c in expr:
if c in lefty:
S.push(c)
elif c in righty:
if S.is_empty():
return False
if righty.index(c) != lefty.index(S.pop()):
return False
return S.is_empty()
if __name__ == '__main__':
s = '()(()){{[]}}{{[(())]}}'
s2 = '{[3+2-(5+6)-(10+4)}'
print(is_matched(s))
print(is_matched(s2))
结果
True
False