题目描述
对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。
给定字符串A以及它的长度n,请返回最长回文子串的长度。
测试样例:
"abc1234321ab",12
返回:7import java.util.*; public class Palindrome { public int getLongestPalindrome(String A, int n) { // write code here //第i个字符到第j个字符是否为回文串 boolean[][] dp = new boolean[n][n]; int max = 0; //字符串首位字母长度差(d=j-i) for(int d=0;d<n;d++){ //字符串起始位置 for(int i=0;i<n-d;i++){ //子串结束位置 int j = i+d; //如果字符串i到j的首尾相等,再根据字符串i+1到j-1来确定 if(A.charAt(i)==A.charAt(j)){ if(d==0||d==1){ dp[i][j]=true; }else{ dp[i][j]=dp[i+1][j-1]; } if(dp[i][j]){ //更新最大长度 max=Math.max(max,d+1); } } } } return max; } }