本文主要是介绍11.有效的括号-Leetcode 020(python),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
- 示例
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
- 解决方案
本想自己解决,但是用了一堆if else的判断最后把自己都快搞疯掉也不能AC,看了网上的解决方案,意识到自己的问题在于老想着用最笨的方法去遍历记录,对数据结构的理解、掌握和应用不到位,效率低,效果差。
参考的解决方案使用的思路是用栈的数据结构来解决,如果当前字符是左括号,则直接放入栈中,如果是右括号,那么就判断此时栈里的字符是否是与之对应的左括号,如果不是的话则返回False,要注意如果此时栈是空的,也是返回False。
另外需要注意的是有可能会出现字符串中只有左括号的情况,栈不为空,但是返回的是False。一开始做的时候没有考虑到这个,报错了。
- 代码
class Solution:def isValid(self, s):""":type s: str:rtype: bool"""l = len(s)if l ==0 :return True#如果字符个数为奇数,直接返回Falseelif l%2 ==1:return Falsed = {'(':')','[':']','{':'}'}#栈stack = []for i in s:#如果当前字符为左括号,则直接加入栈中if i in d:stack.append(i)#如果当前字符为右括号else:if not stack:return Falseelse:#判断当前栈中是否有与当前右括号相匹配的左括号if d[stack.pop()] != i:return False#之所以判断栈此时是否为空,是要考虑字符串是'(('的情况if stack == []:return Trueelse:return False
这篇关于11.有效的括号-Leetcode 020(python)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!