【Leetcode】20. 有效的括号(Valid Parentheses)

No20. 有效的括号

题目

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

有效字符串需满足:

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

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

示例 1

  • 输入: “()”
  • 输出: true

示例 2

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

示例 3

  • 输入: “(]”
  • 输出: false

示例 4

比较重要

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

示例 5

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

提示

  • 0 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成

解题代码(Python3)

class Solution:
    def isValid(self, s: str) -> bool:
        #栈
        stack = []
        pattern_dict = dict(zip(list(')]}'),list('([{')))
        for x in s:
        	#如果是左括号,直接入栈
            if x in pattern_dict.values():
                stack += x
            else:
                if len(stack) == 0:
                    return False
                if stack[-1] == pattern_dict[x]:
                    #这里pop是O(1)
                    stack.pop()
                else:
                    return False
        #最后注意要对栈进行检查
        return True if len(stack) == 0 else False

在这里插入图片描述

思路:

利用栈去做匹配,左括号直接入栈;右括号要进行判别,如果与栈顶元素与该右括号匹配,则栈顶元素进行出栈,否则直接返回False。

另外在循环后,要对栈进行判空操作。

复杂度分析:

  • 时间复杂度O(n/2) = O(n)
  • 空间复杂度O(1)

其他想法:

在这里插入图片描述

如果使用del stack[-1],那么时间复杂度会变为O(n^2),验证效果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Xiao_Spring/article/details/113731097
今日推荐