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. react学习笔记(二)编写第一个react组件

    继续上一节课的内容,打开App.js:会看到如下代码: import React, { Component } from 'react';  //在此文件中引用React,以及reat的组件类 imp ...

  2. C#利用反射实现两个类的对象之间相同属性的值的复制

    http://blog.csdn.net/u013093547/article/details/53584591 今天在拷贝对象的时候,看着代码实在是有点烦,一堆一样的代码,还是找找有没有直接反射拷贝 ...

  3. HRMS文件解析2

    returntablefieldColorFilterGray()函数在/lib/select_menu.php文件中,函数如下: function returntablefieldColorFilt ...

  4. Unity3D Shader水波效果

    水波效果 Shader "Custom/WaterWave" { Properties { _MainTex ("Base (RGB)", 2D) = &quo ...

  5. VMWare共有3种网络连接模式

     VMWare共有3种网络连接模式,分别是: 1. bridged(桥接模式):虚拟机将直接连接到物理局域网,使自身独立于宿主机外,从局域网路由器获取IP.这种方式虚拟OS可以和局域网中其他终端实现互 ...

  6. 1. Mysql数据库的安装

    1. Mysql数据库的安装 (1)打开Mysql安装软件,同意相关协议进入下一步安装,在选择安装类型中选择[自定义]进入下一步安装. (2)选择安装的组件信息. (3)服务器软件安装目录 (4)数据 ...

  7. 比例尺与DEM空间分辨率

    我国 4 种比例尺 DEM 及其空间分辨率的对应关系:  1:100 万 DEM  --  1000m 空间分辨率:  1:25 万 DEM  --  100m 空间分辨率:  1:5 万 DEM  ...

  8. 爬虫----爬虫请求库selenium

    一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作, ...

  9. Nordic NRF51822 从零开始系列(一)开发环境的搭建

    硬件准备     (1)nrf51822 开发板一块(此处使用的是青云系列的,自带jlijnk ob+usb串口芯片)或者使用nrf51822模块+jlink_ob                 ( ...

  10. poj1734 Sightseeing trip【最小环】

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:8588   Accepted:3224   ...