首先将String(aba) 扩张成一个char
并维护一个等长int[]记录以该点为中心的最长回文串长度len
并记录长度最长的中心点max(维护max + int[max] 最大)
如何计算:
初始化: int[0] = 1 max = 0
计算int[x]
if(x < max + int[max]) {
if(int[2*max - x] +x <= max + int[max]) {
int[x] = int[2*max-x]
} else {
int[x] = max + int[max] - x;
再左右扩 是否等(无优化)
}
} else {
int[x] = 1;
左右扩 是否等(无优化)
}
|已计算|x|未计算|
if(|___max____|x |__max + max.len__|)
____if(|_x'_max__|x|_x+x.len_max+max.len_|)
____else(|_x'_max__|x|__max+max.len_x+x.len_|)
else(|___max___max + max.len_|x |____|)