[LeetCode]20-有效的括号

20. 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例:
输入: "{[]}" -> true
输入: "([)]" -> false

解法1

用字典来存储括号对, 用Stack来记录遍历字符串的结果, 左括号入栈, 有对应的右括号就出栈
示例代码

class Solution:
    def isValid(self, s):
        if s is None or len(s) == 0:  #排除异常情况, 字符串为空时返回True
                return True
        if len(s)%2 == 1:  #排除异常情况, 字符串为奇数时返回False
            return False
        bracket = {'(':')','{':'}','[':']'}  #把括号一一对应存入字典
        stack = []
        for each in s:  
            if each in bracket:  #遍历字符串, 发现左括号入栈
                stack.append(each)
            else:  #不是最括号的情况
                if not stack or each != bracket[stack.pop()]:
                    return False  #栈空, 即不是以最括号开头或不是从最后一个开衫对应, 返回False
        return stack == []   #一一对应出栈则说明是有效括号

解法2

依然是最括号入栈, 有对应的右括号出栈, 相当于是简化版
示例代码:

    def isValid(self, s):
        a = {')':'(', ']':'[', '}':'{'}  #右括号对应最括号的字典
        l = [None]  #设置None排除空值的情况
        for i in s:
            if i in a and a[i] == l[-1]:
                l.pop()  #右括号, 且与最后一个最括号对应, 出栈
            else:
                l.append(i)  #左括号入栈
        return len(l)==1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,207评论 0 13
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,467评论 0 5
  • 不多说,python中用到日期、时间的话使用datetime这个模块,下面给出一些简单的用法示例,包括创建实例、格...
    Jiafu阅读 238评论 0 0
  • 文/失落的羊 1. 《水煮鱼和油麦菜的故事》写作手记和花絮 如果我能把对码字的热情拿出来用在故事的女主身上,故事结...
    失落的羊阅读 291评论 3 1
  • 以前觉得侃侃而谈是种高素质——如今觉得安静是一种素养。所谓素养,就是在不同的环境: 比如在公共区域中,将自己声音调...
    平平无奇小个子阅读 138评论 0 0