算法列表

32.最长有效括号 困难

布莱克2026-03-03 11:29

问题:

给你一个只包含 '('')' 的字符串,找出最长有效(格式正确且连续)括号 子串 的长度。

左右括号匹配,即每个左括号都有对应的右括号将其闭合的字符串是格式正确的,比如 "(()())"


示例 1:

输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"

示例 2:

输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"

示例 3:

输入:s = ""
输出:0

回答:

var longestValidParentheses = function(s) {
    //维护一个栈,但栈里存放的是索引,而不是括号
    let max = 0;
    //初始化一个-1,代表开始之前的位置
    let stack = [-1];
    for (let i = 0; i < s.length; i++) {
        if (s[i] == '(') {
            stack.push(i)
        } else {
            stack.pop();
            if (stack.length == 0) {
                stack.push(i)
            } else {
                //匹配成功,长度为当前索引-栈顶索引
                max = Math.max(max, i - stack[stack.length - 1])
            }
        }
    }
    return max;
};


assistant