Leetcode 020 有效的括号(Valid Parentheses) 思路详解 + 反思易错 Python实现

本人一直在努力地积累Leetcode上用Python实现的题,并且会尽力讲清每道题的原理,绝不像其他某些博客简略地带过。
如果觉得讲的清楚,欢迎关注。



给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

输入: "()[]{}"
输出: true

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true

思路:一个很朴素的原则,后出现的左括号一定比在它之前出现的左括号先匹配到自己的另一半。那也就是说它很明显在提示我们用栈去储存我们的左括号。每当我们遇到一个右括号时,我们从栈结构中取出一个元素看它们是否匹配。这就是我们check的基本操作。

代码及其详细注释,(beat 55)

 
  
class Solution :
def isValid ( self , s ):
"""
:type s: str
:rtype: bool
"""
leftlist = []
#左括号与右括号,注意相匹配符号的index也是匹配的
left = '{[('
right = '}])'
#因为s全是括号,所以我们直接遍历
for i in s:
#是左括号,加进栈结构
if i in left:
leftlist.append(i)
else :
#遇到右括号,取出最近放入的左括号
if len (leftlist) != 0 :
if left.index(leftlist.pop()) != right.index(i):
return False
#取不出,说明有右括号多了
else :
return False
#当左括号不剩下多的,才true
if len (leftlist) == 0 :
return True
#否则false
else :
return False


反思易错:1.我们可以用python Builtin list 的 append pop 方法快速构建一个简易的栈

2.不光要考虑长得样子(形式)匹不匹配,还要考虑数量匹不匹配(右括号多了?还是左括号多了?)








猜你喜欢

转载自blog.csdn.net/weixin_41958153/article/details/80712326
今日推荐