zoukankan      html  css  js  c++  java
  • leetcode20之匹配括号

     题目描述:

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

    有效字符串需满足:


     左括号必须用相同类型的右括号闭合。
     左括号必须以正确的顺序闭合。


    注意空字符串可被认为是有效字符串。

    示例 1:

    输入: "()"
    输出: true


    示例 2:

    输入: "()[]{}"
    输出: true


    示例 3:

    输入: "(]"
    输出: false


    示例 4:

    输入: "([)]"
    输出: false

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/valid-parentheses

    代码实现:

     1 def isValid2(s):
     2     '''
     3     借助栈来匹配括号
     4     :param s:
     5     :return:
     6     '''
     7     lookup = {"(": ")", "[": "]", "{": "}"}
     8     left = 0
     9     stack = []  # 定义数组,实现堆栈先进后出功能
    10     if len(s) % 2 == 0:
    11         while left < len(s):
    12             if s[left] in lookup:  # 为左括号,入栈
    13                 stack.append(s[left])
    14                 left += 1
    15             else:  # 为右括号,判断右括号与栈顶元素是否匹配
    16                 if stack:  # 栈不为空情况下
    17                     if lookup[stack.pop(-1)] == s[left]:  # 匹配成功
    18                         left += 1
    19                     else:
    20                         return False
    21                 else:
    22                     return False
    23     else:
    24         return False
    25     # return True if len(stack)==0 else False
    26     return not stack
    27 
    28 
    29 print("---测试isValid2(s)-------")
    30 s = "(()"
    31 print(isValid2(s))

    输出:

    ---测试isValid2(s)-------
    False

    总结:匹配括号,利用栈是个很好的选择。代码的实现思路是,从左到右遍历该括号组成的字符串,遇到一个左括号,压入栈中,遇到右括号,进行匹配。由于最开始遇到的右括号需要和最后遇到的左括号进行匹配,因此即匹配当前右括号和栈顶元素即可,若匹配成功,指针向右移动,循环上述步骤即可,直至所有括号都遍历完。若匹配不成功,直接返回False,结束循环。需要注意的是,匹配时栈顶一定要存在元素,如果栈顶不存在元素(说明在遇到该右括号之前没遇到左括号),返回False,结束循环,存在弹出元素进行匹配即可。很明显匹配的括号字符串长度肯定为偶数,若长度为奇数,直接返回False即可。完成上述匹配后,如果栈不为空,说明有剩余没匹配,返回False,反之返回True。

  • 相关阅读:
    浅析 c# Queue
    c# Stack操作类
    delegate,event, lambda,Func,Action以及Predicate
    推翻MMSOA与WEBService,使用MEMBRANE soap Monitor检查 wsdl文件。
    JS打印表格(HTML定义格式)
    坑爹的META 刷新页面 框架页面中TOP页面提示刷新 meta元素设置而不基于 JS 的坑爹写法。
    Silverlight载入动画(简易)
    WPF先开了再说
    跨域WEB Service 调用(摘自ASP.NET高级编程第三版)
    安装程序找不到Office.zhcn\OfficeMUI问题
  • 原文地址:https://www.cnblogs.com/rounie/p/13527605.html
Copyright © 2011-2022 走看看