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==''

该博客是LeetCode题解,用Python解决“有效的括号”问题。题目要求判断只含特定括号的字符串是否有效,需满足左括号用相同类型右括号闭合且顺序正确。给出两种解题方法,一是用栈,二是用Python的replace函数,并给出注意事项。
353

被折叠的 条评论
为什么被折叠?



