class Solution {
public int longestValidParentheses(String s) {
//动态规划,dp[i]为以s[i]为结尾的最长有效字串长度
//s[i]=='(',dp[i]为零
//s[i]=')',看对称位置是否为'(',注意()(()),这种情况,前面也得加上
if(s==null||s.length()==0){
return 0;
}
char[] chas=s.toCharArray();
int[] dp=new int[chas.length];
int pre=0;
int res=0;
for(int i=1;i<chas.length;i++){
if(chas[i]==')'){
pre=i-dp[i-1]-1;//对称
if(pre>=0&&chas[pre]=='('){
dp[i]=dp[i-1]+2+(pre>0?dp[pre-1]:0);
}
}
res=Math.max(res,dp[i]);
}
return res;
}
}
public int longestValidParentheses(String s) {
//动态规划,dp[i]为以s[i]为结尾的最长有效字串长度
//s[i]=='(',dp[i]为零
//s[i]=')',看对称位置是否为'(',注意()(()),这种情况,前面也得加上
if(s==null||s.length()==0){
return 0;
}
char[] chas=s.toCharArray();
int[] dp=new int[chas.length];
int pre=0;
int res=0;
for(int i=1;i<chas.length;i++){
if(chas[i]==')'){
pre=i-dp[i-1]-1;//对称
if(pre>=0&&chas[pre]=='('){
dp[i]=dp[i-1]+2+(pre>0?dp[pre-1]:0);
}
}
res=Math.max(res,dp[i]);
}
return res;
}
}