美文网首页算法学习打卡计划
leetcode第二十题 —— 有效的括号

leetcode第二十题 —— 有效的括号

作者: 不分享的知识毫无意义 | 来源:发表于2019-11-23 13:04 被阅读0次

1.题目

原题:

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

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。

例子:

输入: "()[]{}"
输出: true
解释:是一一匹配的对应关系

2.解析

这道题算是一道休闲题,没有特别复杂的情况,由于是两个字符串的匹配,可以考虑用堆栈的数据结构。
在做题之前先把可能出现的情况考虑清楚,再下手:

  • 空字符串,题目说认定为true,那么如果是空直接返回True
  • 输入字符串是单数,单数肯定无法满足一一匹配,直接返回false
  • 输入字符串是偶数,一种是以)等开头的,肯定无法匹配,直接返回false,一种是以(等开头需要判断。
    这道题有几个知识点需要提前说明一下:
  • 字符串的操作,insert/pop/append可以模拟除堆栈和队列的数据结构
  • 字典的遍历,直接写if i in dict1,判断的是i是否在字典的key里

3.python代码

class Solution:
    def isValid(self, s):
        charcter = {'(': ')', '{': '}', '[': ']'}
        if len(s) % 2 != 0:
            return False
        if not s:
            return True
        stack = []
        for i in s:
            if i in charcter:
                stack.append(i)
            else:
                if not stack or i != charcter[stack[-1]]:
                    return False
                stack.pop()
        return len(stack) == 0

相关文章

网友评论

    本文标题:leetcode第二十题 —— 有效的括号

    本文链接:https://www.haomeiwen.com/subject/ckkhwctx.html