Простейший вариант - использовать
префикс-функцию (алгоритм Кнута-Морриса-Пратта). Тогда поиск будет достаточно медленным на больших текстах, однако прост в реализации.
Можно использовать
суффиксный массив, тогда поиск по тексту будет заметно быстрее, однако потребует каждый раз при изменении текста перестраивать суффиксный массив. Вариант для оптимизации - строить его только при запросе на поиск, а при последующих запросах поиска(без изменения текста) использовать уже построенный суффиксный массив.