20 有效的括号
题目 20 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
思路
- 用栈实现,大家别看到栈就头疼,其实理解了这道题就会觉得超级简单了。
- 循环字符串,如果遇到“(”,栈中添加“)”,遇到“[”,栈中添加“]”,遇到“{”,栈中添加“}”,这样做得目的是循环遇到了 ), ], } 则直接弹出栈中的元素,如果最后栈为空,则证明括号有效,否则栈无效。(自己画画图举例子试试就知道了超简单了)
代码
class Solution:
def isValid(self, s: str) -> bool:
stack = []
for i in s:
if i == "(": stack.append(")")
if i == "[": stack.append("]")
if i == "{": stack.append("}")
if i == ")":
# 注意万一字符串上来就是),],},此时栈弹不出来元素,返回False
if stack != [] and stack.pop() == ")":
continue
return False
if i == "]":
if stack != [] and stack.pop() == "]":
continue
return False
if i == "}":
if stack != [] and stack.pop() == "}":
continue
return False
return stack == []