leetcode-20 | 有效的括号

题目描述

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

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

注意空字符串可被认为是有效字符串。
示例 1:

输入: “()”
输出: true

示例 2:

输入: “()[]{}”
输出: true

示例 3:

输入: “(]”
输出: false

示例 4:

输入: “([)]”
输出: false

示例 5:

输入: “{[]}”
输出: true

思路解答

很明显,需要使用栈的特性来解决,下面就来尝试一下。

  1. 空串直接返回True
  2. 由于匹配,必是两两配,也就是长度是偶数
  3. 在循环判断中,遇到左括号,直接入栈;遇到右括号,判断栈顶和当前元素是否是一对
  4. 结果返回栈的长度是否是0即可

代码实现

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        if s=="":
            return True
        if len(s) % 2 != 0:
            return False
        stack = []
        for i in s:
            if i == '{' or i=='(' or i=='[':
                stack.append(i)
            else:
                if len(stack) == 0:
                    return False
                top = stack.pop(len(stack) - 1)
                if i == '}' and top != '{':
                    return False
                if i == ')' and top != '(':
                    return False
                if i == ']' and top != '[':
                    return False
        return len(stack) == 0

运行结果

执行用时 : 24 ms, 在Remove Nth Node From End of List的Python提交中击败了100.00% 的用户
内存消耗 : 11.7 MB, 在Remove Nth Node From End of List的Python提交中击败了31.95% 的用户

提交时间状态执行用时内存消耗语言
几秒前通过24 ms11.7MBpython

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses


   Reprint policy


《leetcode-20 | 有效的括号》 by 梦否 is licensed under a Creative Commons Attribution 4.0 International License
 Previous
leetcode-150 | 逆波兰表达式求值 leetcode-150 | 逆波兰表达式求值
题目描述根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -,*, /。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为
2019-07-27
Next 
破烂 | 简单的任务计划 破烂 | 简单的任务计划
截止时间:2019年9月1日详情: 自己定制一个Hexo的主题 尝试写一个html的视频播放器 爬虫 刷题LeetCode 虽然,这个计划可能100%不会被执行。大概是空话多了对自己也是一种发自内心的不信任。不过人总需要一些盼头,哪怕
2019-07-27
  TOC