最长有效括号

题目链接

32. 最长有效括号 - 力扣(LeetCode)

思路:

  1. 了解题目所需要的 有效的括号子串,并且像这种 ()() 连续的也要算

  2. 那么我们需要知道 有效的括号子串无非就俩种,一种是 成对出现 () 要么是包围成为一个嵌套的一个子串 (()) 这样的

  3. 因此我们知道,当 s[i] 出现 ) 时,就是我们需要去计算到最长有效字段的值,我们使用 dp [i] 表示 s[0] 到 s[i-1] 这个串 所出现的最大值

  4. 那么 在出现 成对的 () 这种情况时,我们需要判断 s[i-1] 是否 为 ( ,并且 i-1 不能数组越界

5.在出现 非成对 (()) 这种情况时,我们需要看对应的 i - dp[i-1] 的 值是什么,我们可以沿用,这个值 因为 dp[i-1] 表示的是 不包含当前 字符,前面的字符所出现的最大长度, i - dp[i-1] 就是找到最早的那个 下标是多少,并且需要满足是 ( 的情况

代码:

javascript 复制代码
/**
 * @param {string} s
 * @return {number}
 */
var longestValidParentheses = function (s) {
    let res = 0;
    let dp = new Array(s.length + 10).fill(0)
    for (let i = 1; i < s.length; i++) {
        if (s[i] === ')') {
            if (s[i - 1] === '(') {
                dp[i] = (i >= 2 ? dp[i - 2] : 0)+2
            }
            else if (i - dp[i - 1] > 0 && s[i - dp[i - 1] - 1] === '(') {
                dp[i] = dp[i - 1] + ((i - dp[i - 1]) >= 2 ? dp[i - dp[i - 1] - 2] : 0) + 2
            }
            res = Math.max(res, dp[i])
        }
    }

    return res;
};
相关推荐
2301_81665122几秒前
C++中的策略模式高级应用
开发语言·c++·算法
LDR0062 分钟前
如何使用OpenClaw提高工作效率?
数据结构·算法
liuyao_xianhui2 分钟前
优选算法_模拟_替换所有的‘?‘_C++
开发语言·javascript·数据结构·c++·算法·链表·动态规划
币之互联万物8 分钟前
LLM 偏好算法解析:大语言模型内容收录倾向与 NEOXGEO 技术底蕴
人工智能·算法·语言模型
菜鸟小九11 分钟前
hot100(81-90)
java·数据结构·算法
炽烈小老头15 分钟前
【每天学习一点算法 2026/03/20】单词搜索
学习·算法
旖-旎23 分钟前
二分查找(山脉数组的峰顶索引)(5)
c++·算法·leetcode·二分查找·力扣·双指针
阿贵---27 分钟前
单元测试在C++项目中的实践
开发语言·c++·算法
进击的小头27 分钟前
第14篇:MPC控制案例——无人机高度控制
python·算法·无人机
2401_8914821733 分钟前
C++中的事件驱动编程
开发语言·c++·算法