Количество всех подстрок строки n - равно биномиальному коэффициенту (2, n + 1). Т.е. 1/2(n+1)n.
Т.е. в худшем случае у вас n^2 подстрок. А в лучшем - n. Вот только я бы не особо радовался. Так как строки лучшего случая выглядят примерно так: "aaaaaaaaaaaaaaaa". Здесь 16 символов и 16 уникальных подстрок.
Я это все к чему - за линейное время точно ничего осмысленного не выйдет.
Количество уникальных подстрок можно посчитать так:
https://www.quora.com/Given-a-string-how-do-I-find...
К сожалению, автор не дал оценки своего алгоритма. Но, похоже, что он работает за O (n log n).
Так как суффиксный массив строится за O(n log n), а LCP отрабатывает за O(n)