# 【Day 37】最长有效括号

要求 ${O(1)} 空间复杂度。

# 题目描述

给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。

示例 1:

输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2:

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-valid-parentheses 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

# 我的回答

# 解法一

# 时间复杂度 O(n)

# 空间复杂度 O(n) 最长应该也就一个 n 的空间

括号记录方法,使用一个栈记录括号的进出

当遇到左括号时近栈,遇到右括号时考虑情况

1.已经空栈了,说明全部都是有效括号,将最新的 i 记录下来

2.不是空栈,说明有无效括号占位,进行比较 最新 i 的位置和上一次空栈区间 取最大值记录

image-20200811144956307

var longestValidParentheses = function (s) {
    let leftStack = [-1]
    let longest = 0
    for (let i = 0; i < s.length; i++) {
        if (s[i] == '(') {
            leftStack.push(i)
        } else {
            leftStack.pop()
            if (!leftStack.length) {
                leftStack.push(i)
            } else {
                longest = Math.max(longest, i - leftStack[leftStack.length - 1])
            }
        }
    }
    return longest
};

# 参考回答

Last Updated: 12/22/2022, 9:53:26 AM