给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
-
左括号必须用相同类型的右括号闭合。
-
左括号必须以正确的顺序闭合。
-
每个右括号都有一个对应的相同类型的左括号。
示例 1:输入:s = "()" 输出:true
示例 2:输入:s = "()[]{}" 输出:true
示例 3:输入:s = "(]" 输出:false
class Solution:def isValid(self, s: str) -> bool:dic={'{':'}','[':']','(':')'}stack=[]for char in s:if char in dic: stack.append(char)
#栈中应该一直有一个或多个(,[,{。如果没有stack.pop()会报空数据错误,因此这里增加判断直接返回Falseelif len(stack)==0:return False
#括号不匹配返回Falseelif dic[stack.pop()]!=char:return Falseif len(stack)!=0: #栈中还有元素返回Falsereturn Falsereturn True
class Solution:def isValid(self, s: str) -> bool:dic = {'{': '}', '[': ']', '(': ')', '?': '?'} #dic有可能会查询到stack中的'?'stack = ['?'] #不会因为stack.pop()为空报错for c in s:if c in dic: stack.append(c)elif dic[stack.pop()] != c: return False return len(stack) == 1 #stack中只剩'?'