动态规划:F[i]表示末尾到第i个括号的最大匹配括号数。
last=i-1-F[i-1],表示上一个不匹配的地方,
要么是这样:****(*****)就匹配了,那么F[i]=f[last-1]+2+F[i-1]
要么就是不匹配,F[i]=0
public class Solution {
public int longestValidParentheses(String s) {int n=s.length();
int[] F=new int[n];
if(n==0||n==1)
return 0;
F[0]=0;
int i,last,max=0;
for(i=1;i<n;i++)
{
if(i-1-F[i-1]>=0)
{
last=i-1-F[i-1];
if(s.charAt(last)=='('&&s.charAt(i)==')')
{
F[i]=2+F[i-1];
if(last-1>=0)
F[i]+=F[last-1];
}
else
F[i]=0;
}
else
{
F[i]=0;
}
if(max<F[i])
max=F[i];
}
return max;
}
}