public class Solution {
public String longestPalindrome(String s) {
char[] cc=s.toCharArray();
int[][] dp=new int[cc.length+1][cc.length+1];
int maxlen=0;
int maxstart=0;
int maxend=0;
for(int i=cc.length-1;i>=0;i--)
for(int j=i;j<cc.length;j++)
if(cc[i]==cc[j]&&(j-i<2||dp[i+1][j-1]==1)){
dp[i][j]=1;
if(maxlen<j-i){
maxstart=i;
maxend=j;
maxlen=j-i;
}
}
return s.substring(maxstart,maxend+1);
}
}
上为仿照palindrome partition 代码版本,下为bottom up 版本速度比上面的快一倍
public String longestPalindrome(String s) {
char[] cc=s.toCharArray();
String res="";
int maxlen=-1;
for(int i=0;i<cc.length*2;i++){
if(i/2-maxlen<0||i/2+maxlen>=cc.length)
continue;
int j=0;
if(i%2==1)
j=1;
for(;j<=cc.length;j=j+2){
if(i-j<0||(i+j)/2>=cc.length)
break;
if(cc[(i-j)/2]!=cc[(i+j)/2])
break;
if(maxlen*2<j){
maxlen=j/2;
res=s.substring((i-j)/2,(i+j)/2+1);
}
}
}
return res;
}