最长有效括号

题目链接

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

思路:

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

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

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

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

5.在出现 非成对 (()) 这种情况时,我们需要看对应的 i - dpi-1 的 值是什么,我们可以沿用,这个值 因为 dpi-1 表示的是 不包含当前 字符,前面的字符所出现的最大长度, i - dpi-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;
};
相关推荐
洋不写bug4 分钟前
链表补充练习,双链表的模拟实现
java·数据结构·链表·双链表·底层实现
residual_fan5 分钟前
持续对比强化学习(Continual Contrastive Reinforcement Learning)论文分享
人工智能·算法·数据挖掘·数据分析
s_w.h22 分钟前
【 计网 】序列化与反序列化
linux·服务器·网络·算法·bash
信奥卷王43 分钟前
2025年09月GESPC++五级真题解析(含视频)
算法
白狐_79843 分钟前
408 数据结构|外部排序:流程与 k 路归并
数据结构·算法
闻缺陷则喜何志丹1 小时前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor G
c++·算法·动态规划·洛谷
leihefeng1 小时前
手写数字识别:KNN vs 逻辑回归实战
python·算法·机器学习·逻辑回归·scikit-learn
全栈技术负责人2 小时前
DeepSeek Harness 业务工具权限插件 dsh-tool-permission设计思路
网络·算法·ai·ai编程
mmmmath_32 小时前
面试题 02.07. 链表相交
算法·链表
residual_fan3 小时前
特征级SMOTE(Feature-level SMOTE)论文分享
人工智能·算法·数据挖掘·数据分析