题目:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
代码+注意点:
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
#使用出栈入栈的操作+字典(用来对应查询)
#原写dic={"{":"}","(":")","[":"]"}
dic = {')':'(',']':'[','}':'{'}
stack=[] #栈初始为空,用来pop和append
for i in s: #i对应的是每个括号
#append比较多的话就柔和到一起,一个else搞定
#stack为空:append
#是左括号不是右括号:append
#右括号可以和左括号配对:把左括号pop
#怎样实现配对:字典
#考虑特殊情况:第一个为右括号
if i in dic and stack!=[]:
#好代码: if i and stack in dic #即stack不为空?
#排除了栈为空时将右括号加进去的方法
#即当此时为右括号时候,判断与上一个括号是否配对
if stack[-1]==dic[i]:
stack.pop()
else:
return False
else: #当为左括号时,append进去
stack.append(i)
#语法:名字.append(添加内容)
return not stack #巧妙的语法