题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例
输入: “()”
输出: true
输入: “()[]{}”
输出: true
输入: “(]”
输出: false
输入: “([)]”
输出: false
输入: “{[]}”
输出: true
解答
参考官方解答,利用栈
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
length = len(s)
# 空字符串被认为是有效字符串
if length == 0:
return True
# 不成对必然不是有效字符串
if length%2 != 0:
return False
pair = dict()
pair["("] = ")"
pair["["] = "]"
pair["{"] = "}"
stack = list()
stack.append(s[0])
i = 1
while i<length:
if len(stack) != 0:
# stack中最后一个是右括号,说明前面没有和其对应的左括号
if stack[-1] not in pair.keys():
return False
# 当前括号是右括号且与stack中最后一个括号对应
if s[i]==pair[stack[-1]]:
stack.pop()
# 当前括号是左括号
# 当前括号是右括号,但是前一个括号和它不对应
else:
stack.append(s[i])
# 当前stack是空的,前面的都配对了
else:
stack.append(s[i])
i += 1
return len(stack)==0
利用Python的函数,如果发现成对括号,则将其替换为空;若所有括号都成对,则最后字符串为空。
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
while '{}' in s or '()' in s or '[]' in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s == ''