马拉车算法 最长回文子串

首先将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 |____|)

猜你喜欢

转载自blog.csdn.net/elison_zlj/article/details/80267750