问题描述
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
解决方案
- 创建一个字典来映射括号的关系
- 利用栈的后进先出特性来对括号进行校验
- 如果要元素为正括号,直接入栈
- 如果要入栈的括号不能与栈尾的元素闭合,则返回错
- 最后站如果不为空,则返回错误
时间复杂度:O(n)
show me the code
class Solution:
def isValid(self, s: str) -> bool:
my_dict = {
"}": "{",
"]": "[",
")": "("
}
my_stack = []
for i in s:
if i not in my_dict: # 如果不是反括号,入栈
my_stack.append(i)
elif not my_stack or my_dict[i] is not my_stack.pop(): # 如果栈为空,或者当前的反括号不能与栈尾的元素闭合
return False
return not my_stack # 栈空则返回真,反之则假