Cómo encontrar el número total de palíndromos diferentes de longitud k en una cadena dada usando una matriz de sufijos

Deje que la cadena sea [math] S [/ math]. Formamos una nueva cadena [matemática] P = S + rev (S) [/ matemática]. donde [math] rev (S) [/ math] es el reverso de la cadena [math] S [/ math].

Ahora, mientras recorremos la matriz de sufijos de P si encontramos dos sufijos consecutivos (digamos [math] i [/ math] y [math] i + 1 [/ math]), donde uno de ellos pertenece a [math] S [/ matemática] y otra [matemática] rev (S) [/ matemática], sabemos que hemos encontrado un palíndromo de longitud [matemática] l = LCP (SA [i], SA [i + 1]) [/ matemática] , donde [math] LCP (x, y) [/ math] = prefijo común más largo de [math] x [/ math] y [math] y [/ math]. [math] SA [i] [/ math] denota el sufijo que ocurre en la posición [math] i [/ math] si clasificamos lexicográficamente todos los sufijos de la cadena.

Eso significa que tenemos palíndromos de longitud [matemática] 1,2,3… l [/ matemática]. Si [math] K \ le l [/ math], incremente la respuesta.