在之前有写过类似的一道题,见定个小目标之刷LeetCode热题(10)-CSDN博客,这道题需要用到中心扩展法,只是需要多维护两个变量,一个是maxLength和maxStart,代码如下
class Solution {
public String longestPalindrome(String s) {
int length = s.length();
// 定义两个变量用于记录最大回文子串的长度和开始索引
int maxLength = 0, maxStart = 0;
for (int i = 0; i < length; i++) {
// 当j = 0时表示中心点是一个,j = 1时表示中心点是两个
for (int j = 0; j <= 1; j++) {
// 指向中心点,开始往左扩散
int l = i;
// 指向中心点,开始往右扩散
int r = i + j;
// 限制扩散边界,当左右字符相等时则继续往两边扩散
while (l >= 0 && r < length && s.charAt(l) == s.charAt(r)) {
l--;
r++;
}
// 由于在退出while循环时l和r会多移动一步,恢复
l++;
r--;
// 更新maxLength、maxStart
if (maxLength < r - l + 1) {
maxLength = r - l + 1;
maxStart = l;
}
}
}
// 返回长度最大的那个回文子串
return s.substring(maxStart, maxStart + maxLength);
}
}