括号匹配,自己的代码,使用的栈(先进后出)解决,为了思路清晰,给各位用长代码先展示出来,后面有短代码,性能没变:
class Solution:
class Stack:
def __init__(self):
self.__stack_list = []
# push()方法,用来将数据推入栈中
def push(self, data):
self.__stack_list.append(data)
# pop()方法,用来将栈顶的元素推出
def pop(self):
if self.isEmpty() != True:
self.__stack_list.pop()
# peek()方法,用来查看栈顶元素是什么
def peek(self):
if self.isEmpty() != True:
return self.__stack_list[-1]
# getSize()方法,用来获取栈的长度
def getSize(self):
return self.__stack_list.__len__()
# isEmpty()方法,用来判断栈是否为空
def isEmpty(self):
return self.getSize() == 0
def __str__(self):
return self.__stack_list.__str__()
def isValid(self, s: str) -> bool:
stack = self.Stack()
for i in s:
if i == '(' or i == '[' or i == '{':
stack.push(i)
elif i == ')' and stack.peek() == '(' :
stack.pop()
elif i == ']' and stack.peek() == '[' :
stack.pop()
elif i == '}' and stack.peek() == '{' :
stack.pop()
else:
return False
return stack.isEmpty()
Leetcode上测试:
**自我反思:
经过前面几次失败,发现自己在对栈的构建上没有思考全面,如果当栈为空时进行peek,pop会出错,应该在这两个方法里面进行判断是否为空
缩短代码后,思路一样,性能没变:**
class Solution:
def isValid(self, s: str) -> bool:
stack = []
for i in s:
if i == '(' or i == '[' or i == '{':
stack.append(i)
elif len(stack) == 0:
return False
elif i == ')' and stack[-1] == '(' :
stack.pop()
elif i == ']' and stack[-1] == '[' :
stack.pop()
elif i == '}' and stack[-1] == '{' :
stack.pop()
else:
return False
return len(stack) == 0