【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
相关推荐
木木子221 小时前
# 猜数字游戏 — HarmonyOS交互逻辑与随机算法实现
算法·游戏·华为·交互·harmonyos
stolentime2 小时前
SP8549 MAIN75 - BST again题解
c++·算法·二叉树·深度优先·图论·记忆化搜索·组合数学
stolentime2 小时前
AT_pakencamp_2020_day1_k Gcd of Sum题解
c++·算法
2601_956121972 小时前
map_计蒜客T1271 完美K倍子数组
c++·算法
编程圈子3 小时前
电机驱动开发学习19. 霍尔 BLDC 三段式 FOC 启动算法
驱动开发·学习·算法
Hello_Damon_Nikola3 小时前
伺服电机堵转检测算法详解
单片机·嵌入式硬件·算法
罗小罗同学4 小时前
安德森癌症中心发表SCOPE IO模型,实现了对罕见肿瘤帕博利珠单抗疗效的精准预测,在患者早期即可预判药效
人工智能·算法·医学图像处理·医学ai
变量未定义~4 小时前
Tarjan算法-强连通分量、路径、出差
算法
geovindu4 小时前
CSharp: Iterative Algorithms
开发语言·后端·算法·c#·.net·迭代算法
道影子4 小时前
《黄帝内经》021章|津凝精晶 沉降为患
人工智能·深度学习·神经网络·算法·机器学习