zoukankan      html  css  js  c++  java
  • 栈应用:有效的括号(第一题)

    问题:

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

    有效字符串需满足:

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

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

    分析:

    三种模式的括号可能会出现 ' { [ ( } '  这种情况 所以单纯的通过计数方法来匹配肯定不行

    这里运用栈这种数据结构的特点:先进后出 FIFO

    遇上左括号直接压栈,右括号直接出栈并匹配,接着上代码

     1 class Solution(object):
     2     def isValid(self, s):
     3         """
     4         :type s: str
     5         :rtype: bool
     6         """
     7 
     8         # The stack to keep track of opening brackets.
     9         stack = []
    10 
    11         # Hash map for keeping track of mappings. This keeps the code very clean.
    12         # Also makes adding more types of parenthesis easier
    13         mapping = {")": "(", "}": "{", "]": "["}
    14 
    15         # For every bracket in the expression.
    16         for char in s:
    17 
    18             # If the character is an closing bracket
    19             if char in mapping:
    20 
    21                 # Pop the topmost element from the stack, if it is non empty
    22                 # Otherwise assign a dummy value of '#' to the top_element variable
    23                 top_element = stack.pop() if stack else '#'
    24 
    25                 # The mapping for the opening bracket in our hash and the top
    26                 # element of the stack don't match, return False
    27                 if mapping[char] != top_element:
    28                     return False
    29             else:
    30                 # We have an opening bracket, simply push it onto the stack.
    31                 stack.append(char)
    32 
    33         # In the end, if the stack is empty, then we have a valid expression.
    34         # The stack won't be empty for cases like ((()
    35         return not stack

    参考:https://leetcode-cn.com/articles/valid-parentheses/

  • 相关阅读:
    RPC
    动词 or 名词 :这是一个问题 【转载】
    js 如何清除setinterval
    封装动画特效
    飞入特效
    建字段_添加数据_生成json.php
    mybatis由浅入深day02_9.3.5使用生成的代码_9.4逆向工程注意事项
    mybatis由浅入深day02_9逆向工程
    mybatis由浅入深day02_8spring和mybatis整合
    mybatis由浅入深day02_7.4mybatis整合ehcache_7.5二级缓存应用场景_7.6二级缓存局限性
  • 原文地址:https://www.cnblogs.com/dmndxld/p/10705883.html
Copyright © 2011-2022 走看看