代码:
public int getLongestPalindrome(String A, int n) {
boolean [][]dp=new boolean[n][n]; //构建dp
for(int i=0;i<n;i++) dp[i][i]=true; //给对角线赋值为true
if(A.length()<2 && !A.isEmpty())
{return 1; //字符串
}else if(A.isEmpty()){return 0;
}
int maxLen=1; //存储最大元素
char []str= A.toCharArray(); //将字符串转换成char数组,方便下面的判断
for(int j=1;j<n;j++){
for(int i=0;i<j;i++){
if(str[i]==str[j]){
if(j-i<3){ dp[i][j]=true; //如果是在三个字符以内(包含三个字符),因为已经确定了首尾相同,所以dp[i][j]为true
}else{
dp[i][j]=dp[i+1][j-1]; //这是状态转换方程,也就是动态规划的重点所在--将问题划分为子问题
}
}else{ //两字符不相同,dp[i][j]为false
dp[i][j]=false;
}
if (dp[i][j] && j -i + 1 >maxLen ) {
// 更新最大长度
maxLen=j-i+1;
}
}
}
return maxLen;
}分析:

京公网安备 11010502036488号