算法思想
利用一个列表模拟堆栈进行匹配,遍历字符串,遇见左括号就进行入栈操作,遇见一次右括号就进行一次出栈,并进行一次比较。例如栈内的符号是:({,下一个遍历的字符是},见到右括号则进行一次出栈操作,进行一次比较,比较的是{和}两个符号,是匹配的,则接着遍历下一个位置。利用字典的键值对特性进行比较
详细代码及注释:
class Solution:
def isValid(self, s):
if len(s) % 2 == 1:#偶数个符号才是一定匹配的
return False
d = {'{': '}', '[': ']', '(': ')'}
stack = []
for i in s:
# in stack
if i in d:
stack.append(i)
else:
if not stack or d[stack.pop()] != i:
return False
return stack ==[]
几个小的知识点
1.利用列表可以来模拟堆栈的操作,用append模拟入栈,用pop进行出栈的操作
2.匹配问题的时候可以使用字典来进行匹配
3.如果是对称问题,可以利用这段代码
if len(s) % 2 == 1:
return False
进行是否为偶数个数的元素
4.注意return stack ==[]
这种形式的判断,节省不少的时间