zoukankan      html  css  js  c++  java
  • Leetcode 20:有效的括号

    Leetcode 20:有效的括号

    题目

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

    • 左括号必须用相同类型的右括号闭合。
    • 左括号必须以正确的顺序闭合。
      注意空字符串可被认为是有效字符串。

    示例 1:

    输入: "()"
    输出: true
    

    示例 2:

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

    示例 3:

    输入: "(]"
    输出: false
    

    示例 4:

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

    示例 5:

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

    思路

    这是一道使用stack这种结构的典型例题。我们可以先建立这样一个map

    {'{':'}', '[':']', '(':')'}
    
    

    然后我们对输入的字符串入栈操作(如果入栈的元素是key的话)

    ()[]{}
    stack: (
    map['(']=')'
    

    依次比较直到出现不匹配或者所有元素都比较结束。这里我们还要注意这样的问题

    ()[]{}(
    

    这个时候直到string的末尾,我们的stack种还有一个元素(。所以我们最后还要判断一下len(stack)==0。

    答案

    class Solution:
        def isValid(self, s):
            """
            :type s: str
            :rtype: bool
            """
            stack = list()
            match = {'{':'}', '[':']', '(':')'}
            for i in s:
                if i == '{' or i == '(' or i == '[':
                    stack.append(i)
                else:
                    if len(stack) == 0:
                        return False
    
                    top = stack.pop()
                    
                    if match[top] != i:
                        return False
    
            if len(stack) != 0:
                return False
            return True
    
    
  • 相关阅读:
    sha256 in C language
    制作带动画效果的状态栏
    带进度条的任务栏
    在状态栏中显示当前系统时间
    在状态栏中显示当前操作员
    在状态栏中显示复选框
    设计浮动工具栏
    可以拉伸的菜单
    任务栏托盘菜单
    带历史信息的菜单
  • 原文地址:https://www.cnblogs.com/dailyprogrammer/p/12241625.html
Copyright © 2011-2022 走看看