代码:
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; }
分析: