zoukankan      html  css  js  c++  java
  • LeetCode 20 _ 有效的括号

    1. 题目描述

     

    2. 代码

     1 class Solution:
     2     def isValid(self, s: str) -> bool:
     3         n = len(s)#获取字符串的长度
     4         if n == 0:#如果长度为0,则表示空串,本题认为是合法的串
     5             return True
     6         if n % 2 == 1:#如果是奇数个括号,则必然不合法
     7             return False
     8         stack = []#定义一个列表用来模拟栈
     9         for c in s:#循环字符串中的每个字符
    10             if c == '(' or c == '{' or c == '[':#如果是左括号
    11                 stack.append(c)#直接入栈
    12             elif c == ')':#如果是右括号
    13                 if len(stack) > 0:#栈不为空
    14                     if stack[-1] == '(':#栈顶元素是对应的左括号
    15                         stack.pop(-1)#目前合法,则将栈顶出栈
    16                     else:
    17                         stack.append(')')#栈顶元素无法匹配,则当前右括号入栈
    18                 else:#栈为空,则无法匹配
    19                     return False
    20             elif c == '}':
    21                 if len(stack) > 0:
    22                     if stack[-1] == '{':
    23                         stack.pop(-1)
    24                     else:
    25                         stack.append('}')
    26                 else:
    27                     return False
    28             elif c == ']':
    29                 if len(stack) > 0:
    30                     if stack[-1] == '[':
    31                         stack.pop(-1)
    32                     else:
    33                         stack.append(']')
    34                 else:
    35                     return False
    36         if len(stack) == 0:#如果栈可以左右都匹配(成对消除)
    37             return True#则是合法串
    38         else:
    39             return False

    思路: 

    1.左右匹配, 就相当于1进1出, 最后栈的长度为0, 返回真.

    2. 如果都不匹配, 就都入栈, 最后栈的长度不等于0, 返回false.

    3. 如果是示例5, 就是先 { 和 [ 入栈, 然后第3个 ] 的时候匹配了栈的-1个元素, 所以就移除, 最后一个 } 也是同样的道理.

     3.整理

    3.1 列表

    1 list1 = ['Google', 'Runoob', 1997, 2000]
    2 list2 = [1, 2, 3, 4, 5 ]
    3 list3 = ["a", "b", "c", "d"]
    4 list4 = ['red', 'green', 'blue', 'yellow', 'white', 'black']

    3.2 元组

    1 tup1 = ('Google', 'Runoob', 1997, 2000)

     3.3 栈, 后进先出.

    list模拟栈,进入顺序0 1 2 3,出栈顺序3 2 1 0

    list(-1)表示栈顶元素.

  • 相关阅读:
    C++句柄类 [ 资深博主 ]
    [C/C++] 第18章:特殊工具与技术《 C++ Primer 》
    [C/C++] 读后的感觉《C++Primer》
    Oracle个人Blogs精华贴
    Oracle安装图解
    [转]怎么成为优秀的软件模型设计者
    如何写一份好的工程师简历[转载]
    如何准备软件工程师的面试[转载]
    JS倒计时
    10个最有前景的JavaScript框架
  • 原文地址:https://www.cnblogs.com/vvzhang/p/13777644.html
Copyright © 2011-2022 走看看