[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

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

相关推荐
计算机软件程序设计3 小时前
基于Python的二手车价格数据分析与预测系统的设计与实现
开发语言·python·数据分析·预测系统
微笑尅乐4 小时前
力扣350.两个数组的交集II
java·算法·leetcode·动态规划
mortimer4 小时前
Traceback 模块:`format_exc` 和 `format_exception` 傻傻分不清
python
Cherry Zack4 小时前
了解Django模型,从基础到实战
python·学习·django
qq7422349845 小时前
语音识别:PyAudio、SoundDevice、Vosk、openai-whisper、Argos-Translate、FunASR(Python)
python·whisper·语音识别
_w_z_j_5 小时前
C++----红黑树
数据结构
曾经的三心草5 小时前
OpenCV2-图像基本操作-阈值与平滑处理-形态学-梯度运算
python·opencv
xiangzhihong85 小时前
Spring Boot实现文字转语音功能
开发语言·python
元亓亓亓6 小时前
LeetCode热题100--994. 腐烂的橘子--中等
算法·leetcode·职场和发展
(●—●)橘子……6 小时前
记力扣2516.每种字符至少取k个 练习理解
算法·leetcode·职场和发展