// suffixes.c
// << Algorithmique du texte >>
// Maxime Crochemore, Christophe Hancart et Thierry Lecroq
// Vuibert, 2001.
#include <stdio.h>
#include "chl.h"
int *suffixes(Mot x, Longueur m) {
int f, g, i, *suff;
suff = (int *)malloc(m*sizeof(int));
if (suff == NULL) error("suffixes");
suff[m - 1] = m;
g = m - 1;
for (i = m - 2; i >= 0; --i)
if (i > g && suff[i + m - 1 - f] < i - g)
suff[i] = suff[i + m - 1 - f];
else {
if (i < g) g = i;
f = i;
while (g >= 0 && x[g] == x[g + m - 1 - f])
--g;
suff[i] = f - g;
}
return(suff);
}