public class Solution {
public String longestPalindrome(String s) {
//本题是动态规划思想,构造一个数组pal[i][j],表示从i到j是否为一个回文,
//pal[i][j]=true;if i=j;
//pal[i][j]=true 当 s[i]==s[j]并且j-i=1;
//pal[i][j]=true 当 j>i+1,s[i]==s[j]并且pal[i+1][j-1]=true;
int start=0;
int end=0;
int maxLen=0;
int len=s.length();
boolean [][] pal=new boolean[len][len];
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
pal[i][j]=false;
}
}
for(int j=0;j<len;j++){
//pal[j][j]=true;
for(int i=0;i<=j;i++){
/*if(i==j-1)pal[i][j]=s.charAt(i)==s.charAt(j);
if(i<j-1){
if(s.charAt(i)==s.charAt(j)&&pal[i+1][j-1])
pal[i][j]=true;
}*/
pal[i][j]=(s.charAt(i)==s.charAt(j)&&((j-i<2)||pal[i+1][j-1]));//次判断特别简介,利用了&&和||短路规则
if(pal[i][j]&&maxLen<j-i+1){
maxLen=j-i+1;
start=i;
end=j;
}
}
}
return s.substring(start,end+1);
}
}