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

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

    输入:s = “)()())”
    输出:4
    解释:最长有效括号子串是 “()()”
    示例 3:

    输入:s = “”
    输出:0

    1. /**
    2. * @param {string} s
    3. * @return {number}
    4. */
    5. var longestValidParentheses = function (s) {
    6. let max = 0
    7. if (s.length < 1) return max
    8. let n = s.length
    9. let stack = [-1]
    10. for (let i = 0; i < n; i += 1) {
    11. let value = s[i]
    12. if (value === '(') {
    13. stack.push(i)
    14. } else if (value === ')') {
    15. stack.pop()
    16. if (stack.length < 1) {
    17. stack.push(i)
    18. } else {
    19. max = Math.max(max, i - stack[stack.length - 1])
    20. }
    21. }
    22. }
    23. return max
    24. };

    image.png