给定一个字符串s,它只包括“(”、“)”、“[”、“]”、“{”、“}”,判断该字符串是否合法。
使用栈的数据结构(先进后出),其实就是Python里的list列表。
①若长度为奇数个,该字符串不合法,返回False。
②若长度为偶数个:
若为右边的括号,且正好和前面一个字符匹配,则删除前一个字符;
若为左边的括号,则添加到列表的末尾;
否则,则返回False。
③最后,若L为空,则返回True。
class Solution:
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
if not s:
return True
length = len(s)
if length%2 != 0: #奇数个
return False
L = [s[0]]
i = 1
while i<length:
if s[i]==')' and L[-1]=='(':
L.pop()
elif s[i]==']' and L[-1]=='[':
L.pop()
elif s[i]=='}' and L[-1]=='{':
L.pop()
elif s[i]=='(' or s[i]=='[' or s[i]=='{':
L.append(s[i])
else:
return False
i += 1
if not L:
return True
else:
return False
其它思路:
使用字典dict。
paren = {'[':']', '(':')', '{':'}'}
valid = []
for i in s:
if i not in paren:
if not valid or i!=paren[valid[-1]]:
return False
valid.pop()
else:
valid.append(i)
return valid == []