括号匹配
用python实现括号匹配,先自定义了一个栈类,包括入栈,出栈,取栈顶元素这四个步骤,其实也就是list的append,pop,stack[-1]这三个操作。
代码
#!/usr/bin/python3
# -*- coding:utf-8 -*-
# 判断有效括号
class Stack(object):
def __init__(self):
self.stack = []
def push(self,data):
self.stack.append(data)
def pop(self):
return self.stack.pop()
def gettop(self):
return self.stack[-1]
class Solution:
def isValid(self, s):
stack_s = Stack()
s_list = list(s)
brackets = {")":"(",
"}":"{",
"]":"["}
for item in s_list:
if(item in ["(","{","["]):
stack_s.push(item)
elif(item in {')', ']', '}'} and len(stack_s.stack) > 0):
if(stack_s.gettop() == brackets[item]):
stack_s.pop()
else:
return False
else:
return False
if(len(stack_s.stack) == 0):
return True
else:
return False
Sol = Solution()
print(Sol.isValid("{()[}"))
值得注意的地方
- 对于字典的设计,k,v分别是右括号和左括号,而不是左括号和右括号
- 右括号并不入栈,只是进行对比,如果匹配成功,就pop栈顶元素,如果匹配不成功,则直接返回False
- 注意代码可读性,不要一味求简洁