LeetCode之有效括号

class Solution:
    def isValid(self,s):
         #第一步,if 判断传入为空的情况
        if s == "":
            return True
        #第二步,if 判断当传入字符串个数为奇数个时,返回False
        if len(s) % 2 ==1:
            return False
        #定义一个字典,左括号为 Key,右括号为 Values
        d = {"(" :")","[" :"]","{" :"}"}
        #空列表,用于保存遍历 S 时的左括号
        l = []
        #遍历 s
        for i in s:
            if i in d:        #判断当 i = 左括号 
                l.append(i)   #将等于左括号的 i 添加到列表 l 中
            else:
                #len(l) == 0时,没有左括号,或者 s 的第一个不是字符不是左括号,返回False
                #弹出 l 中的上一个(当前状态的 l 的最后一个元素)元素作为字典 d 的Key
                #d[l.pop()] != i   判断 Values 与 i 是否相同
                if len(l) == 0 or d[l.pop()] != i :
                    return False
        #下面一段很关键
        #首先,每次出现pop()这个语句的时候,原列表 l 中的最后一个元素就已经弹出了

        #所以,如果左右括号成对出现,并一一对应,最后 l 列表元素个数会为 0 

        if len(l) != 0:
            return False

        return True


用Debug模式调试运行,看列表 l 中元素的变化更容易理解


解释一些这句话:每次出现pop()这个语句的时候,原列表 l 中的最后一个元素就已经弹出了

比如:

list1= [1,2,3]    #定义一个列表

print(list1.pop())#打印list1 pop出来的元素   打印结果显示为 3

#此时你觉得打印列表 list1会是什么结果?

print(list1)       #结果显示为    [1,2]

虽然只是执行打印   print(list1.pop())    但事实上pop这个操作执行了,list1中就只有[1,2]两个元素了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MisterZZL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值