Let $x$ be a non-empty string. The suffix table of $x$ is defined on its positions $i$, $i=0, \dots, |x|-1$, by: $\tsuff[i]$ is the length of the longest suffix of $x$ ending at position $i$. Obviously $\tsuff[[x|-1]=|x|$.
Here is the suffix table of the word $\sa{abaababaaba}$:
$i$ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
$x[i]$ | $\sa a$ | $\sa b$ | $\sa a$ | $\sa a$ | $\sa b$ | $\sa a$ | $\sa b$ | $\sa a$ | $\sa a$ | $\sa b$ | $\sa a$ |
$\tsuff[i]$ | 1 | 0 | 3 | 1 | 0 | 6 | 0 | 3 | 1 | 0 | 11 |
It can be computed in $O(|x|)$ time by the following algorithm.
\begin{algorithmic} \STATE $suff[m-1]\leftarrow 1$ \STATE $g\leftarrow m-1$ \FOR{$i\leftarrow m-2$ \DOWNTO $0$} \IF{$i\gt g \mbox{ and } suff[i+m-1-f]\ne i-g$} \STATE $suff[i]\leftarrow \min\{suff[i+m-1-f],i-g\}$ \ELSE \STATE $(f,g)\leftarrow (i,\max\{i,g\})$ \WHILE{$g\ge 0$ and $x[g]=x[g+m-1-f]$} \STATE $g\leftarrow g-1$ \ENDWHILE \STATE $suff[i]\leftarrow f-g$ \ENDIF \ENDFOR \RETURN{$suff$} \end{algorithmic}
The key idea in Algorithm Suffixes that computes the table sequentially from right to left is to benefit from what has been computed before the current position.
When $z=x[g+1\dd f]$ is a suffix of $x$ and position $i$ is between $g$ and $f$ (see picture), the first step for computing $\tsuff[i]$ is to check whether or not its value can be deduced from the work done on the suffix occurrence of $z$, that is, at position $i+m-1-f$ on $x$. This saves enough work to get a linear-time algorithm.