zoukankan      html  css  js  c++  java
  • 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
    
    
    欢迎,关注我的公众号 “DailyProgrammer”,每天8点为你推送精彩的技术文章!!!
  • 相关阅读:
    实现CA和证书申请
    1.ssh端口
    1.对称加密6和7的操作
    关于网页访问并发量,统计前十,防火墙
    双指针法
    并查集
    c++常用函数
    vector常用方法
    贪心算法
    字符串类问题
  • 原文地址:https://www.cnblogs.com/dailyprogrammer/p/12241632.html
Copyright © 2011-2022 走看看