【LeetCode热题100(86/100)】最长有效括号

题目地址: 链接

状态转移方程:
d p i + 1 = { d p i − 1 + 2 , 若 s i = ′ ) ′ 且 s i − 1 = ′ ( ′ d p i + 2 + d p i − d p \[ i − 1 ] , 若 s i = ′ ) ′ 且 s i − 1 = ′ ) ′ 且 s i − 1 − d p \[ i ] = ′ ( ′ 0 , 其他情况 dpi+1 = \begin{cases} dpi-1 + 2, & \text{若 } si = ')' \text{ 且 } si-1 = '(' \\ dpi + 2 + dpi - dp\[i - 1], & \text{若 } si = ')' \text{ 且 } si-1 = ')' \text{ 且 } si-1-dp\[i] = '(' \\ 0, & \text{其他情况} \end{cases} dpi+1=⎩ ⎨ ⎧dpi−1+2,dpi+2+dpi−dp\[i−1],0,若 si=′)′ 且 si−1=′(′若 si=′)′ 且 si−1=′)′ 且 si−1−dp\[i]=′(′其他情况

TS 复制代码
/*
 * @lc app=leetcode.cn id=32 lang=typescript
 *
 * [32] 最长有效括号
 */

// @lc code=start
function longestValidParentheses(s: string): number {
    let n = s.length;
    const dp = new Array(n + 1).fill(0);
    let ans = 0;
    for(let i = 1; i < n; i ++) {
        if(s[i] == ')') {
            if(s[i - 1] == '(') dp[i + 1] = dp[i - 1] + 2;
            if(s[i - 1] == ')' && s[i - 1 - dp[i]] == '(') {
                dp[i + 1] = dp[i] + 2 + dp[i - dp[i] - 1]
            }
        }
        ans = Math.max(dp[i + 1], ans);
    }
    return ans;
};
// @lc code=end
相关推荐
何以解忧,唯有..24 分钟前
预订酒店问题
算法
No8g攻城狮32 分钟前
【算法】什么是 DFS 与 BFS 及他们的区别
算法·深度优先·宽度优先
zww894911141 分钟前
家政派单系统实战指南:从需求分析到智能调度算法落地
算法·需求分析
手写码匠1 小时前
华为云Flexus+DeepSeek征文|Dify 多 Agent 评测实战:用 DeepSeek-R1 当裁判,打造多智能体系统的自动化质量保障体系
人工智能·深度学习·算法·aigc
ZC跨境爬虫1 小时前
LeetCode 88. 合并两个有序数组(双指针详解 + Java Python 实现)
java·python·算法·leetcode
Nil2081 小时前
leetcode 238除了自身以外数组的乘积
数据结构·算法·leetcode
土司大王1 小时前
LeetCode hot100——最长连续序列
数据结构·算法·leetcode
caimouse1 小时前
ReactOS 图形系统分析(17):区域填充 — EngPaint / IntEngPaint(paint.c)
c语言·开发语言·算法
生态学者1 小时前
Ecological Indicators | 机场鸟调的新方法:用 AWM-PC1 读懂干扰梯度下的鸟类群落
人工智能·算法·r语言·微信公众平台
Herbert_hwt2 小时前
第六章 Java深入理解接口、函数式接口与lambda表达式
java·开发语言·算法