32. 最长有效括号

Posted 潜行前行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了32. 最长有效括号相关的知识,希望对你有一定的参考价值。

  1. 最长有效括号

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

示例 1:

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

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

输入:s = “”
输出:0

动态规划

class Solution {
    public int longestValidParentheses(String s) {
        char[] data = s.toCharArray();
        int[] dp = new int[s.length()];
        int max = 0;
        for(int i=1;i<data.length;i++ ){
            if(data[i] == ')'){
                if(data[i-1] == '('){
                    dp[i] = (i < 2 ? 0 : dp[i-2]) + 2;
                }else if( (i - dp[i-1]) > 0 && data[i - dp[i-1] -1] =='('){
                    dp[i] = dp[i-1] + 2 + ( (i - dp[i-1] -2) < 0 ? 0 : dp[i - dp[i-1] -2]);
                }
                max = Math.max(dp[i],max);
            }
        }
        return max;
    }
}

class Solution {
    public int longestValidParentheses(String s) {
        int max = 0;
        Stack<Integer> stack = new Stack<Integer>();
        stack.push(-1);
        for(int i=0;i<s.length();i++){
            if(s.charAt(i) == '('){
                stack.push(i);
            }else{
                stack.pop();
                if(stack.isEmpty()){
                    stack.push(i);
                }else{
                    max = Math.max(max, i - stack.peek());
                }
            }
        }
        return max;
    }
}

以上是关于32. 最长有效括号的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 32.最长有效括号

LeetCode 32. 最长有效括号c++/java详细题解

leetcode 32: 最长有效括号

Leetcode(32)-最长有效括号

32. 最长有效括号

32. 最长有效括号