本文主要是介绍Leetcode 20.有效的括号 ----python,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 题目描述:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意:空字符串可被认为是有效字符串。
2. 解题思路
(1)法一:可用字符串的思路处理(参考leetcode讨论区代码)
(2)法二:借助栈进行处理,用栈处理这种基本方法还是要会的,基础知识要打劳,虽然代码量多一些,但是像第一种方法不是那么容易想到。
法二考虑多种情况:
- 当字符串为空串时,认为是有效字符串
- 当字符串元素个数为奇数时,有一个括号无法匹配,所以无效
- 当字符串的第一个元素不是左括号时,无效
- 其它情况:若字符为左括号,则入栈,意味着稍后处理;若遇到一个右括号,则检查栈顶元素,若相同类型,就把元素从栈顶弹出,若类型不相同,意味着无效,返回False
- 到最后,若栈中仍有元素,意味着无效,防止“{(”这种情况的出现
3.代码实现
法一(字符串):
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 == ''
法二(栈):
class Solution:def isValid(self, s: str) -> bool:left=['(','[','{']right=[')',']','}']complement=['{}','()','[]']if s=="":#当字符串为空串时,认为是有效字符串return True#当字符串元素个数为奇数时,有一个括号无法匹配,所以无效;当字符串的第一个元素不是左括号时,无效if (len(s)%2==1 or s[0] in right ):return Falsestack=[]for item in s:if item in left:stack.append(item)else:combination=stack[-1]+itemif combination in complement:stack.pop()else:return Falsereturn stack==[]##最后需要判断最后的stack是否为空,因为可能出现全为左括号的情况
这篇关于Leetcode 20.有效的括号 ----python的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!