给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
a = []
dic = {'(':')','{':'}','[':']'} #定义字典为合法括号,左括号为键,右括号为值
if s == '': #判断为空,合法
return True
if len(s)%2 == 1 or s[0] in ['}',']',')']: #判断字符长度,为基数则一定不合法
return False #第一个字符为右括号也一定不合法
for i in s:
if i in dic: #当元素为左括号时,将字典中对应的值(即右括号入栈)
a.append(dic.get(i))
else:
if i == a[-1]: #当元素为右括号时,判断它与栈顶元素是否相同
a.pop() #相同则甩出栈顶元素,不相同则不合法
else:
return False
return a == []
if __name__ == '__main__':
n = Solution()
a = ""
print(n.isValid(a))