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