leetcode第20题,括号匹配,典型栈问题,不过这个题难度比传统括号匹配难度稍高,因为有多个括号匹配,而且这些括号不能相互进行穿插,因此需要我们先用字典来储存对应的括号结构,在栈的编码上,也要考虑更多的情况。总的思路是,遇到前括号,就压入栈,遇到后括号,先查看栈中是否有内容,如果没有直接返回False,如果有进一步查看是否能够匹配最近的相同类型的括号,如果匹配成功就弹出一个栈元素,如果不能匹配则直接失败。所有匹配结束后,继续查看栈中是否还有元素,如果还有这说明仍有前括号没有被匹配,则判定失败。
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
d = {'(':')','{':'}','[':']'}
stack = []
n = len(s)
for i in range(n):
if s[i] == '(' or s[i] == '[' or s[i] == '{':
stack.append(s[i])
if s[i] == ')' or s[i] == ']' or s[i] == '}':
if len(stack) == 0:
return False
elif d[stack[-1]] == s[i]:
del stack[-1]
else:
return False
if len(stack) == 0:
return True
else:
return False