最长有效括号

题目链接

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;
};
相关推荐
橙子牛奶糖2 小时前
Science | 本周最新文献速递
算法·gwas·生物信息学·单细胞测序
fei_sun2 小时前
【总结】【数据结构】【OS】【计组】【计网】
数据结构
皮卡蛋炒饭.2 小时前
背包问题Ⅱ与二分问题
算法
Code Slacker2 小时前
LeetCode Hot100 —— 普通数组(面试纯背版)(五)
数据结构·c++·算法·leetcode·面试
sin_hielo2 小时前
leetcode 3573(买卖股票问题,状态机dp)
数据结构·算法·leetcode
廋到被风吹走2 小时前
【数据库】【Redis】数据结构全景图:命令、场景与避坑指南
数据结构·数据库·redis
松涛和鸣2 小时前
34、 Linux IPC进程间通信:无名管道(Pipe) 和有名管道(FIFO)
linux·服务器·c语言·网络·数据结构·数据库
flashlight_hi2 小时前
LeetCode 分类刷题:110. 平衡二叉树
javascript·算法·leetcode
式5162 小时前
线性代数(九)线性相关性、基与维数
线性代数·算法·机器学习