给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
题解一:
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
dt = {"(":")","{":"}","[":"]"}
bStack=[]
for a in s:
if a=="(" or a=="[" or a=="{":
bStack.append(a)
else:
if len(bStack)==0:
return False
c=bStack.pop(len(bStack)-1)
if (c=="(" and a==")") or (c=="[" and a=="]") or (c=="{" and a=="}"):
pass
else:
return False
if len(bStack) > 0:
return False
return True
while len(aSet)>0:
a = aSet.pop(0)
if a not in dt: return False
if dt[a] not in aSet:return False
idx = aSet.index(dt[a])
aSet.pop(idx)
return True
然后我们可以把它简化一下:
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
dt = {"(":")","{":"}","[":"]"}
bStack=[]
for a in s:
if a in dt:
bStack.append(a)
else:
if len(bStack)==0:
return False
c=bStack.pop(-1)
if dt[c] != a:
return False
if len(bStack) > 0:
return False
return True
while len(aSet)>0:
a = aSet.pop(0)
if a not in dt: return False
if dt[a] not in aSet:return False
idx = aSet.index(dt[a])
aSet.pop(idx)
return True