public String longestPalindrome(String s) {
//动态规划,先构建dp数组,同时记录最大值和位置
if (s == null || s.length() <= 1)return s;
int len = s.length();
boolean[][] dp = new boolean[len][len];
for (int i = 0; i < len; i++) {
dp[i][i] = true;
}
int max = 0;
int pos = 0;
//从后向前,先扑出dp[i + 1][j - 1]
for (int i = len - 2; i >= 0; i--) {
dp[i][i + 1] = s.charAt(i) == s.charAt(i + 1);
if (dp[i][i + 1] && max < 1) {
max = 1;
pos = i;
}
for (int j = i + 2; j < len; j++) {
dp[i][j] = dp[i + 1][j - 1] && s.charAt(i) == s.charAt(j);
if (dp[i][j] && max < (j - i)) {
max = j - i;
pos = i;
}
}
}
return s.substring(pos,pos + max + 1);
}
09-29
1092
09-28
991