给你一个字符串 s
,找到 s
中最长的 回文子串
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
public String longestPalindrome(String s) {
int n = s.length(); // 字符串长度
int max = 1; // 最长回文子串的长度
if (n < 2) {
return s; // 字符串长度小于2直接返回
}
boolean[][] dp = new boolean[n][n]; // dp数组,记录子串是否为回文
int l = 0; // 最长回文子串的起始位置
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (s.charAt(j) != s.charAt(i)) {
dp[j][i] = false; // 不相等的字符,不是回文
} else {
if (i - j < 3) {
dp[j][i] = true; // 相邻或间隔一个字符相等,是回文
} else {
dp[j][i] = dp[j + 1][i - 1]; // 更长的子串回文性由内部决定
}
}
if (dp[j][i] && i - j + 1 > max) { // 更新最长回文子串的信息
l = j;
max = i - j + 1;
}
}
}
return s.substring(l, l + max); // 返回最长回文子串
}