20. 有效的括号

问题描述

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

有效字符串需满足:

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

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

解决方案

  • 创建一个字典来映射括号的关系
  • 利用栈的后进先出特性来对括号进行校验
    • 如果要元素为正括号,直接入栈
    • 如果要入栈的括号不能与栈尾的元素闭合,则返回错
  • 最后站如果不为空,则返回错误

时间复杂度:O(n)

show me the code

class Solution:
    def isValid(self, s: str) -> bool:
        my_dict = {
            "}": "{",
            "]": "[",
            ")": "("
        }
        my_stack = []
        for i in s:
            if i not in my_dict:                                        # 如果不是反括号,入栈
                my_stack.append(i)
            elif not my_stack or my_dict[i] is not my_stack.pop():      # 如果栈为空,或者当前的反括号不能与栈尾的元素闭合
                return False  
        return not my_stack                                             # 栈空则返回真,反之则假

posted @ 2019-04-14 22:45  YanceDev  阅读(163)  评论(0编辑  收藏  举报