CLR cover

Problem 64: Counting Factors Covering a Position

\( \newcommand{\Fac}{\mathcal{C}}% \newcommand{\NFac}{\mathcal{N}}% \newcommand{\prefixsum}{\mathit{prefix\_sum}}% \newcommand{\Count}{\mathit{Count}}% \newcommand{\weig}{\mathit{weight}}% \def\sa#1{\tt{#1}} \def\dd{\dot{}\dot{}} \)

A factor of a word $x$ covers a position $k$ on $x$ if it has an occurrence $x[i\dd j]$ that satisfies $i\leq k\leq j$.

Let $\Fac(x,k)$ denote the number of (distinct) factors of $x$ covering the position $k$ and let $\NFac(x,k)$ denote the number of factors having an occurrence that does not cover $k$.

Show how to compute in linear time $\Fac(x,k)$ and $\NFac(x,k)$ for a given position $k$ on $x$, assuming a constant-size alphabet.

References

  • D. Kempa, A. Policriti, N. Prezza, and E. Rotenberg. String attractors: Verification and optimization. CoRR, abs/1803.01695, 2018.
  • S. Mantaci, A. Restivo, G. Romana, G. Rosone, and M. Sciortino. String attractors and combinatorics on words. CoRR, abs/1907.04660, 2019.
  • G. Navarro and N. Prezza. Universal compressed text indexing. Theor. Comput. Sci., 762:41-50, 2019.
  • N. Prezza. String attractors. CoRR, abs/1709.05314, 2017.