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

posted @ 2020-01-29 21:52  洲洋1984  阅读(78)  评论(0编辑  收藏  举报