0
点赞
收藏
分享

微信扫一扫

【算法练习】 最长有效括号

船长_Kevin 2022-03-12 阅读 42

 最长有效括号

方法一、栈+dp

dp[i] 以s[i-1]结尾的最长的括号子串长度

class Solution {
    public int longestValidParentheses(String s) {
        Deque<Integer> stack = new ArrayDeque<>();
        int n = s.length();
        int[] dp = new int[n+1];  //dp[i] 以s[i-1]结尾的最长的括号子串长度
        int res = 0;
        for(int i=0;i<n;i++){
            char c = s.charAt(i);
            if(c=='('){
                stack.push(i);
                dp[i+1]=0;

            }else{
                if(!stack.isEmpty()){
                    int idx = stack.pop();
                    int len = i-idx+1+dp[idx];
                    dp[i+1] = len;
                    res = Math.max(res,dp[i+1]);
                }else{
                    dp[i+1]=0;
                }
            }
        }
        return res;
    }
}
举报

相关推荐

0 条评论