这道题就是栈这种数据结构的应用,当我们遇到左括号的时候,比如{,(,[,就压栈,当遇到右括号的时候,比如},),],就把栈顶元素弹出,如果不匹配,则返回False,当遍历完所有元素后,栈中仍然有元素,则证明不匹配,也返回False,注意到有效字符串的长度一定为偶数,因此如果字符串的长度为奇数,我们可以直接返回 False,省去后续的遍历判断过程
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
if len(s) % 2 == 1:
return False
stack = []
for kh in s:
if kh in {'{', '(', '['}:
stack.append(kh)
if kh in {'}', ')', ']'}:
if len(stack) < 1:
return False
p = stack.pop()
if kh == '}' and p != '{':
return False
if kh == ')' and p != '(':
return False
if kh == ']' and p != '[':
return False
if len(stack) != 0:
return False
return True