Поиск подстроки в текстовом документе работает на основе алгоритмов, которые позволяют проверить, входит ли заданная подстрока в исходную строку и, если входит, найти первое вхождение. intuit.ru
Некоторые алгоритмы поиска подстроки:
- Прямой поиск (последовательный). intuit.ru Суть алгоритма в посимвольном сравнении строки с подстрокой. intuit.ru Сравнивают первый символ строки с первым символом подстроки, второй символ строки со вторым символом подстроки и так далее. intuit.ru Если все символы совпали, фиксируется факт нахождения подстроки. intuit.ru В противном случае подстроку сдвигают на одну позицию вправо и повторяют сравнение. intuit.ru
- Алгоритм Кнута, Морриса и Пратта. intuit.ru Основан на том, что после частичного совпадения начальной части подстроки с соответствующими символами строки становится известна пройденная часть строки. intuit.ru С помощью этих сведений можно быстро продвинуться по строке. intuit.ru
- Алгоритм Бойера — Мура. cyberleninka.ru ru.wikipedia.org Считается наиболее быстрым среди алгоритмов общего назначения, предназначенных для поиска подстроки в строке. cyberleninka.ru Сначала строят таблицу смещений для искомого образца. cyberleninka.ru Затем совмещают начало строки и образца и начинают проверку с последнего символа. cyberleninka.ru Если последний символ образца и соответствующий ему при наложении символ строки не совпадают, образец сдвигают на величину, полученную из таблицы смещений, и снова проводят сравнение. cyberleninka.ru Если символы совпадают, сравнивают предпоследний символ образца и так далее. cyberleninka.ru Поиск считается оконченным, когда все символы образца совпадают с наложенными символами строки. cyberleninka.ru
- Алгоритм Рабина. cyberleninka.ru Выполняет линейный проход по строке и линейный проход по всему тексту. cyberleninka.ru Время работы алгоритма линейно зависит от размера строки и текста, программа работает быстро, так как проверяет только те подстроки, которые «напоминают» образец. cyberleninka.ru