1. 题目简介
题目:20. 有效的括号
难度:简单
【题目描述】
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
2. 题目解析
【栈问题】
对于有效的括号,它的部分子表达式仍然是有效的括号,比如 {()[()]} 是一个有效的括号,()[{}] 是有效的括号,[()] 也是有效的括号。并且当我们每次删除一个最小的括号对时,我们会逐渐将括号删除完。比如下面的例子。
这个思考的过程其实就是栈的实现过程。因此我们考虑使用栈,当遇到匹配的最小括号对时,我们将这对括号从栈中删除(即出栈),如果最后栈为空,那么它是有效的括号,反之不是。
此外,满足条件:
- 一定是偶数位
- 一定是左括号开头
- 第一个右括号一定匹配前一个左括号
3. 代码实现
Python1
class Solution:
def isValid(self, s: str) -> bool:
while '{}' in s or '()' in s or '[]' in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s == ''
执行用时:56 ms, 在所有 Python3 提交中击败了7.40% 的用户
内存消耗:14.8 MB, 在所有 Python3 提交中击败了97.17% 的用户
Python2
class Solution:
def isValid(self, s: str) -> bool:
"""
:type s: str
:rtype: bool
"""
a = []
dict = {'(':')', '[':']', '{':'}'}
for i in s:
if i in '({[':
a.append(i)
elif i in ')}]':
if a == []:
return False
t = a.pop()
if dict[t] != i:
return False
if a != []:
return False
else:
return True
执行用时:40 ms, 在所有 Python3 提交中击败了51.34% 的用户
内存消耗:14.9 MB, 在所有 Python3 提交中击败了85.50% 的用户