最长有效括号
方法一、栈+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;
    }
}









