思路:动态规划
class Solution {
public String longestPalindrome(String s) {
if (s.length() <= 1){return s;}
int length = s.length();
int max = 0;
int maxi = 0, maxj = 0;
int[][] dp = new int[length][length];
for (int i = 0; i < length; i++) {
dp[i][i] = 1;
}
// 从短往长dp, 先循环长度
for (int L = 2; L <= length; L++) {
// 后循环左边界
for (int i = 0; i < length; i++) {
// 右边界
int j = i + L -1;
if (j >= length){
break;
}
if (s.charAt(i) != s.charAt(j)) {
dp[i][j] = -1;
} else {
if (i == j - 1) {
dp[i][j] = 2;
} else {
dp[i][j] = dp[i + 1][j - 1] > 0 ? dp[i + 1][j - 1] + 2 : -1;
}
}
if (dp[i][j] > max) {
maxi = i;
maxj = j;
max = dp[i][j];
}
}
}
return s.substring(maxi, maxj + 1);
}
}