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]两个元素了

LeetCode之有效括号的更多相关文章

  1. LeetCode 921. 使括号有效的最少添加(Minimum Add to Make Parentheses Valid) 48

    921. 使括号有效的最少添加 921. Minimum Add to Make Parentheses Valid 题目描述 给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的 ...

  2. leetcode 有效的括号

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: - 左括号必须用相同类型的右括号闭合. - 左括号必须以正确的顺序闭合. 注意空字符 ...

  3. Leetcode 22.生成括号对数

    生成括号对数 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n =3,生成结果为: [ "((()))", "( ...

  4. Leetcode题目22.括号生成(动态规划-中等)

    题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "( ...

  5. Java实现 LeetCode 1111 有效括号的嵌套深度(阅读理解题,位运算)

    1111. 有效括号的嵌套深度 有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然.详情参见题末「有效括号字符串」部分. 嵌套深度 depth 定义:即有效括号字符串嵌套的层数, ...

  6. LeetCode(1)---检查括号出现的合法性

          题目: 检查字符串中"( )","[ ]","{ }" 的合法性,即是否成对出现 eg,如出现"[()]", ...

  7. leetcode 921. 使括号有效的最少添加

    问题描述 给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的括号( '(' 或是 ')',可以在任何位置),以使得到的括号字符串有效. 从形式上讲,只有满足下面几点之一,括号字符 ...

  8. leetcode 1541. 平衡括号字符串的最少插入次数

    问题描述 给你一个括号字符串 s ,它只包含字符 '(' 和 ')' .一个括号字符串被称为平衡的当它满足: 任何左括号 '(' 必须对应两个连续的右括号 '))' . 左括号 '(' 必须在对应的连 ...

  9. leetcode 921. 使括号有效的最少添加(Python)

    class Solution: def minAddToMakeValid(self, S): """ :type S: str :rtype: int "&q ...

随机推荐

  1. 路由查询命令tracert

    from:https://jingyan.baidu.com/article/9c69d48f4df25713c8024e66.html 在命令行中输入“tracert ”并在后面加入一个IP地址,可 ...

  2. Android打印当前所有线程及对应栈信息

    Map<Thread, StackTraceElement[]> threadMap = Thread.getAllStackTraces(); Log.e("albertThr ...

  3. sscanf的字符串格式化用法

    sscanf()为C语言标准库函数,用于从指定字符串中读入与指定格式相符的数据.函数原型声明在stdio.h头文件中: int sscanf(const char *str, const char * ...

  4. B - Space Ant

    The most exciting space discovery occurred at the end of the 20th century. In 1999, scientists trace ...

  5. 【Java并发编程六】线程池

    一.概述 在执行并发任务时,我们可以把任务传递给一个线程池,来替代为每个并发执行的任务都启动一个新的线程,只要池里有空闲的线程,任务就会分配一个线程执行.在线程池的内部,任务被插入一个阻塞队列(Blo ...

  6. c++中map按key和value排序

    ``` #include<iostream> #include<algorithm> #include<vector> #include<map> #i ...

  7. Django:视图views(三)

    写一下Cookie.重定向.Session Cookie 测试代码,承接前面的代码: 路由: booktest/urls.py urlpatterns = [ url('^$',views.index ...

  8. 原来的ALL IN ONE架构,快速的演进成为SOA架构

    原来的ALL IN ONE架构,快速的演进成为SOA架构 京东服务市场高并发下SOA服务化演进架构 原创: 张俊卿 京东技术 今天

  9. [Day2]变量、数据类型转换以及运算符

    1.变量 变量是内存中装载数据的小盒子,你只能用它来存取数据 2.计算机存储单元 (1)计算机存储设备的最小信息单元叫“位(bit)”,“比特位” (2)8个比特位表示一个数据,是计算机的最小存储单元 ...

  10. python3实现字符串的全排列的方法(无重复字符)

    https://www.jb51.net/article/143357.htm 抛出问题 求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时 ...