Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.
For "(()", the longest valid parentheses substring is "()", which has length = 2.
Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.
public class Solution {
public int longestValidParentheses(String s) {
int len = s.length();
if(len == 0){
return 0;
}
int f[] = new int[len];
int ret = 0;
for(int i=1; i<len; i++){
if(s.charAt(i) == ')'){
if(i - f[i-1] - 1>=0 && s.charAt(i - f[i-1] - 1) == '('){
f[i] = f[i-1] + 2;
if(i - f[i] > 0){
f[i] += f[i-f[i]];
}
ret = Math.max(ret, f[i]);
}
}
}
return ret;
}
}