class Solution {
public String longestPalindrome(String s) {
if (s == null) return null;
char[] cs = s.toCharArray();
if (cs.length <= 1) return s;
// 最长回文子串的长度(至少是1)
int maxLen = 1;
// 最长回文子串的开始索引
int begin = 0;
int i = 0;
while (i < cs.length) {
int l = i - 1;
// 找到右边第一个不等于cs[i]的位置
int r = i;
while (++r < cs.length && cs[r] == cs[i]);
// r会成为新的i
i = r;
// 从l向左,从r向右扩展
while (l >= 0 && r < cs.length && cs[l] == cs[r]) {
l--;
r++;
}
// 扩展结束后,cs[l + 1, r) cs(l, r)就是刚才找到的最大回文子串
// ++l后,l就是刚才找到的最大回文子串的开始索引
int len = r - ++l;
if (len > maxLen) {
maxLen = len;
begin = l;
}
}
return new String(cs, begin, maxLen);
}
}
08-03
1万+