[LeetCode 热题 100] 32. 最长有效括号

[LeetCode 热题 100] 32. 最长有效括号

背景

给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号 子串 的长度。

左右括号匹配,即每个左括号都有对应的右括号将其闭合的字符串是格式正确的,比如 "(()())"。

示例 1:

输入:s = "(()"

输出:2

解释:最长有效括号子串是 "()"

示例 2:

输入:s = ")()())"

输出:4

解释:最长有效括号子串是 "()()"

示例 3:

输入:s = ""

输出:0

提示:

0 <= s.length <= 3 * 10^4

s[i] 为 '(' 或 ')'

解题思路

这题用的是堆栈的思路。

先放一个-1在栈里,是防止空栈。

遇到(就直接入栈,

如果是),先弹出一个元素。此时检查栈,

如果空了,显然是)数量大于(数量导致无法形成有效括号了,后面也不可能再利用前面的括号数量,所以直接在这里做一个隔断,把这里的下标入栈。

如果不空的话,比较现存最大长度和(目前下标-栈顶元素)-> 目前长度的最大值

代码

python 复制代码
class Solution:
    def longestValidParentheses(self, s: str) -> int:
        stack = [-1]
        max_length = 0
        cur_length = 0
        for i in range(len(s)):
            if s[i] == "(":
                stack.append(i)
            else:
                stack.pop()
                if stack == []:
                    stack.append(i)
                else:
                    max_length = max(max_length, i-stack[-1])   
        return max_length

小tips

这题官方归在了动态规划里面,但实际好像并不那么动态规划,用官方解的动态规划还会超时。

相关推荐
寄存器漫游者2 分钟前
数据结构 二叉树核心概念与特性
数据结构·算法
2301_822375445 分钟前
Python虚拟环境(venv)完全指南:隔离项目依赖
jvm·数据库·python
m0_706653235 分钟前
跨语言调用C++接口
开发语言·c++·算法
2301_790300966 分钟前
Python类型提示(Type Hints)详解
jvm·数据库·python
皮皮哎哟8 分钟前
数据结构:从队列到二叉树基础解析
c语言·数据结构·算法·二叉树·队列
Eric.Lee202111 分钟前
SLAM 路径规划的安全走廊实现
python·机器人·ros·路径规划·避障·安全走廊
一匹电信狗16 分钟前
【高阶数据结构】并查集
c语言·数据结构·c++·算法·leetcode·排序算法·visual studio
小W与影刀RPA18 分钟前
【影刀RPA】:智能过滤敏感词,高效输出表格
大数据·人工智能·python·低代码·自动化·rpa·影刀rpa
Yorlen_Zhang24 分钟前
python Tkinter Frame 深度解析与实战指南
开发语言·python
2401_8384725125 分钟前
Python多线程与多进程:如何选择?(GIL全局解释器锁详解)
jvm·数据库·python