Один из известных мне методов, о которых пока нет упоминания, - это Кнут-Моррис-Пратт-Поиск (KMP), но он не очень хорош для языковых текстов (из-за префиксного свойства алгоритма), но для вещей как ДНК-соответствие это очень, очень хорошо.
Еще один хеш-поиск (я не знаю, есть ли официальное имя). Сначала вы вычисляете значение хеш-функции вашего шаблона, а затем создаете скользящее окно (с размером вашего шаблона) и перемещаете его по тексту и проверяете, совпадают ли хэши. Идея здесь состоит в том, чтобы выбрать хеш таким образом, чтобы вам не нужно было вычислять хеш для полного окна, но вы обновляете свой хэш только со следующим символом (и старый символ выпадает из вычисления хеша). Этот алгоритм работает очень хорошо, когда у вас есть несколько строк для поиска (потому что вы просто заранее вычисляете свои хэши для своих строк).