Вы можете использовать метод скользящего хэша ( Рабин-Карп ) или реализовать KMP , который немного похож на конечный автомат.
Как правило, Рабин-Karp используется при поиске нескольких целевых строк, потому что вторая проверка, которая требуется (для фактического равенства, а не просто хеш-равенства), стоит того, чтобы иметь возможность проверить исходную строку только один раз.В вашем случае с любым из них все будет в порядке.
Существует также более наивное решение, которое O (n ^ 2) и требует проверки целевой строки в каждой позиции исходной строки.