【题目】给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
public static String longestPalindrome(String s) {
/*
* 状态方程:dp[j][i] = s[i] == s[j] && dp[j-1][i+1]
*/
int len = s.length();
if (len == 0 || s.equals("")) {
return s;
}
int start = 0;
int longestIndex = 1;
boolean[][] dp = new boolean[len][len];
for (int i = 0; i < len; i++) {
for (int j = 0; j <= i; j++) {
if (i - j < 2) {
dp[j][i] = s.charAt(j) == s.charAt(i);
} else {
dp[j][i] = s.charAt(j) == s.charAt(i) && dp[j + 1][i - 1];
}
if (dp[j][i] && longestIndex < i - j + 1) {
longestIndex = i - j + 1;
start = j;
}
}
}
return s.substring(start, start + longestIndex);
}