给定一个只包括 '(',')','{','}','[',']'
的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
【简单】
【分析】遍历s,将出现的左括号单独拿出来,从第一次遇到右括号开始,与拿出来的左括号一个一个判断是否匹配。判断是否匹配的方法是通过设置比如"[“和”]"有相同的index,具体减code。
举个栗子:s="{[]}"
,相对应地,解题过程模拟如下:
每次当遇到一个左括号时,就将左括号都放入res中,res: ='{',' ['
每次遇到一个右括号就同res中最后一个括号相比较看看是不是配对括号,若不匹配,直接返回false;若匹配就将res中的最后一个括号删除。
注意几个特殊情况:一是当第1个括号是右括号,直接false;二当遍历完s之后,len(res)!=0时false
,说明还有左括号没有匹配到右括号。
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
if len(s)==0:
return True
if len(s)==1:
return False
left=["[","{","("]
right=["]","}",")"]
res=[]
for i in s:
if i in left:
res.append(left.index(i))
if i in right:
if not res or res[-1]!=right.index(i): #第一个括号是右括号,或者左右括号不匹配
return False
else:
res.pop()
return True if len(res)==0 else False