题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
看了大部分解题思路,都是推荐用栈的数据结构来帮助解题,主要是由于栈的先进后出的原理,可以建立一个字典格式
{'}': '{', ']': '[', ')': '('}
在遇到有右括号,去掉最上面的符号,看是否是对应的左括号,不是的话就是错误的,是的继续,直至最后是否为0
class Solution:
def isValid(self, s: str) -> bool:
dic = {'{': '}', '[': ']', '(': ')', '?': '?'}
stack = ['?']
for c in s:
if c in dic: stack.append(c)
elif dic[stack.pop()] != c: return False
return len(stack) == 1
想想还有没有其他的解决方式呢,观看事例,所有正确的都是有最小单元括号对的,只要每次还能去掉括号对直至最后看字符串长度是否0,也是能后解决的,代码如下:
class Solution:
def isValid(self, s):
while '{}' in s or '()' in s or '[]' in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s == ''