给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
L=len(s)
if L%2!=0:
return False
LL=[]
A={'(':0,'[':1,'{':2,')':3,']':4,'}':5}
k=0
for i in s:
LL.append(i) #栈
if k>=1 and len(LL)>=2:
if A[LL[-2]]==A[LL[-1]]-3: #看是不是一对,是的话就是消消乐
LL.pop()
LL.pop()
k=k+1
if LL==[]:
return True
else:
return False
#用栈的思想,删除最里面的最小的(),再依次往外删除,比如([{}]())
#执行过程是:(,([,([{,([,(,((,(, ,
#在这里我通过字典来判断是否为一对()
#添加了s不是偶数的判断
#我第一次做的代码,我的想法是找到对称分段,比如(),({}),{[]}等来判断,可以
#很好判断()[{}][]
#但是当遇到{[()]()}这种不对称的情况,就无能为力
L=len(s)
A={'(':0,'[':1,'{':2}
B={')':0,']':1,'}':2}
st=0
end=1
i=1
if L==1:
return False
while st <L:
if s[st] in A:
a=A[s[st]]
if end >=L:
return False
if s[end] in B:
b=B[s[end]]
if a==b:
st=end+1
end=st+1
else:
return False
else:
if end+i==L:
return False
while s[end+i] in A:
i=i+1
if st+2*i+2>L:
return False
S=s[st:st+2*i+2]
l=len(S)
for j in range(i+1):
if S[l-1-j]not in B or A[S[j]]!=B[S[l-1-j]]:
return False
st=st+2*i+2
end=st+1
else:
return False
i=1
return True