1、题目描述
有效的括号。
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
2、思路
用栈,是左括号则压入栈,右括号的话则出栈比较是否匹配。若不匹配,则返回False。注意:若第一个是右括号,且此时的栈为0,则直接返回False。见代码
代码
class Solution:
def isValid(self, s: str) -> bool:
# s 必定为偶数
if len(s) % 2 != 0: return False
hash_map = {
']': '[',
'}': '{',
')': '('
}
# 一个栈
stack = []
for char in s:
# 若当前char为左括号,则压入栈
if char not in hash_map:
stack.append(char)
# 若当前char为右括号,则出栈进行比较
else:
# ====== 注意:若空栈且第一个char为右括号,则直接返回False!========== #
if len(stack) == 0:
return False
# 若当前不匹配,则直接返回False
if stack[-1] != hash_map[char]:
return False
# 匹配完成,记得出栈。
else:
stack.pop()
return True if len(stack) == 0 else False