leetcode-20. 有效的括号

一、问题描述

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

有效字符串需满足:

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

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

示例 1:

输入: "()"
输出: true

示例 2:

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

示例 3:

输入: "(]"
输出: false

示例 4:

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

示例 5:

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

二、代码和思路

1.首先定义开括号和闭括号的字符串,另外定义一个字典用来对应开闭括号

2.这里用一个lst来存储开括号(这里用了栈的概念),碰到开括号存在最后一个,碰到闭括号就拿lst的最后一个元素去匹配,匹配失败就返回false

3.最后检查lst是否还存在开括号,返回bool值len(lst)==0

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        open_brackets='([{'
        close_brackets =')]}'
        brackets_dicts={')':'(',']':'[','}':'{'}
        lst=[]
        i,n=0,len(s)
        while i<n:
            if s[i] in open_brackets:
                lst.append(s[i])
            if s[i] in close_brackets:
                if len(lst)==0:return False
                if brackets_dicts[s[i]] != lst.pop():
                    return False
            i += 1
        return len(lst)==0        

三、运行结果

leetcode-20. 有效的括号