给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
1 class Solution: 2 def isValid(self, s: str) -> bool: 3 dic={'(':')','[':']','{':'}','?':'?'} 4 stack=['?'] 5 for i in s: 6 if i in dic: 7 stack.append(i) 8 elif dic[stack.pop()]!=i: #出栈的pop返回值对应字典键,需要判断条件,所以不能用else 9 return False 10 return len(stack)==1
解题思路:
算法原理:栈先入后出特点恰好与本题括号排序特点一致,遇到左括号入栈,遇到右括号将对应栈顶左括号出栈。
栈stack不能为空,要不然stack.pop()报错,需要给stack赋初值