/*
* 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
*/
class Solution {
public int expand(String s, int left, int right) {
// 中心展开法,以s为中心判断回文
int L = left, R = right;
while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {
L--;
R++;
}
return R - L - 1;// 返回回文字符串长度
}
public String longestPalindrome(String s) {
if (s.length() == 0 || s == null)
return " ";
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++) {
// 开始遍历每一个字符
int len1 = expand(s, i, i);// 该串是奇数串的时候
int len2 = expand(s, i, i + 1);// 偶数
int len = Math.max(len1, len2);// 取两者最大值
if (len > end - start) {
// 若遍历之后还有更长的字串,就更新end和start值
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return s.substring(start, end+1);// 裁切出需要的字符串
}
}
看得官方题解