栈:括号匹配问题
- 栈(Stack)是一个数据集合,额可以理解为只能在一端进行插入或删除操作的列表
- 栈的特点: 后进先出
- 栈的概念: 栈顶,栈底
- 栈的基本操作: 进栈(压栈):push ; 出栈 : pop ; 取栈顶 : gettop
class Demo:
def __init__(self):
self.stack = []
#增
def push(self,element):
self.stack.append(element)
#删
def pop(self):
return self.stack.pop()
#查栈顶
def get_top(self):
if len(self.stack) > 0:
return self.stack[-1]
else:
return None
def long(self):
if len(self.stack) == 0:
return len(self.stack)
def brace_match(s):
stack = Demo()
match = {'}':'{',']':'[',')':'('}
for ch in s:
if ch in {'{','(','['}:
stack.push(ch)
else:
if stack.long(): #如果栈的长度为0,说明是空的,那就没有括号能够匹配
return False
elif stack.get_top() == match[ch]: #r如果栈顶括号和传劲来的括号的另一半一样,说明能够匹配,那就把当前的这个符号删除,接着往下比较
stack.pop()
else: #和栈顶括号不能匹配
return False
if stack.long()==0: #上面的循环结束后,如果为空了,证明完全匹配,否则说明有匹配不上的
return True
else:
return False
print(brace_match('[{([{}])}]')) #True
print(brace_match('[{([{}])}')) #False