LeetCode题解(python)
20. 有效的括号
题目描述
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
解题心得
只是计数匹配的话,过分简单。但是有
([)]
这种情况,就不一样了。从前往后搜索,如何才能在相应的位置匹配
方法一:栈
搜索到’(’,就入栈
搜索到‘)’,检查当前栈顶元素是否与之对应,出栈。
最后栈空则全部匹配,中间不匹配或最后栈不空,则False
小tip:使用+1,-1来进行匹配,可能未来是创意源泉。
方法二:python的replace
注意:要按照{},[],()的搜索顺序来,不然会超时,这是python先来先判断的机制决定的。
解题代码
方法一:栈
class Solution:
def isValid(self, s: str) -> bool:
stack = []
dit = {'(':1,')':-1,'[':2,']':-2,'{':3,'}':-3}
if len(s)%2==1:
return False
for i in s:
if dit[i]>0:
stack.append(i)
else:
if stack:
temp = stack.pop()
if -dit[temp]!=dit[i]:
return False
return not stack
方法二:replace
class Solution:
def isValid(self, s: str) -> bool:
if len(s)%2 ==1:
return False
while '{}' in s or '()' in s or '[]' in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s==''