//设置dp为i到j是否为回文串,1代表是,0为不是,i到j相等,则考虑i-1到j-1是否是回文串,一层一层递进
public String longestPalindrome(String s) {
int maxLen = 0;String longestStr = s.substring(0,1);
int length = s.length();
int[][] table = new int[length][length];
//every single letter is palindrome
for (int i = 0; i < length; i++) {
table[i][i] = 1;
}
if(s==null)
return null;
if(s.length()==1)
return s;
for (int i = 0; i <= length - 2; i++) {
if (s.charAt(i) == s.charAt(i + 1)){
table[i][i + 1] = 1;
longestStr = s.substring(i, i + 2);
}
}
for (int l = 3; l <= length; l++) {
for (int i = 0; i <= length-l; i++) {
int j = i + l - 1;
if (s.charAt(i) == s.charAt(j)) {
table[i][j] = table[i + 1][j - 1];
if (table[i][j] == 1 && l > maxLen)
longestStr = s.substring(i, j + 1);
} else {
table[i][j] = 0;
}
}
}
return longestStr;
}