题解 | #最长回文子串#
最长回文子串
https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af
中心扩展法,统计长度因为每次都是+2,初始化的时候为了方便初始化比正常的大了1,所以需要减一;
import java.util.*;
class Solution {
public int getLongestPalindrome(String s) {
int len = s.length();
int maxcnt = 0;
if (s == null || (len) < 1) return 0;
//总共有2 * len - 1个中心点
for (int i = 0; i < 2 * len - 1; i++) {
//通过遍历每个回文中心,向两边扩散,并判断是否回文字串
//有两种情况,left == right,right = left + 1,这两种回文中心是不一样的
// 奇数相同,偶数加一
int left = i / 2, right = left + i % 2;
int cnt;
if (i % 2 == 0) cnt = 0;
else cnt = 1;
while (left >= 0 && right < len && s.charAt(left) == s.charAt(right)) {
// 每次往外延展其实是2个长度!
cnt += 2;
//如果当前是一个回文串,则记录数量
if (maxcnt < cnt) {
maxcnt = cnt;
}
left--;
right++;
}
}
return maxcnt - 1;
}
}
