20_有效的括号

本秂侑毒 提交于 2020-01-30 00:07:02

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!