zoukankan      html  css  js  c++  java
  • 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]两个元素了

  • 相关阅读:
    nginx Server names
    ES6--变量的声明及解构赋值
    Android ListView and Tips.
    Eclipse自己定义keystore
    POJ 1129 Channel Allocation(DFS)
    机器学习笔记十三:Ensemble思想(上)
    设计模式——享元模式具体解释
    老猪带你玩转自定义控件三——sai大神带我实现ios 8 时间滚轮控件
    老猪带你玩转android自定义控件二——自定义索引栏listview
    android动手写控件系列——老猪叫你写相机
  • 原文地址:https://www.cnblogs.com/MisterZZL/p/9534299.html
Copyright © 2011-2022 走看看