В формальной теории языка и информатике подстрока — это непрерывная последовательность символов внутри строки . [ требуется ссылка ] Например, « the best of » — это подстрока « It was the best of times ». Напротив, « Itwastimes » — это подпоследовательность « It was the best of times », но не подстрока.
Префиксы и суффиксы являются частными случаями подстрок. Префикс строки — это подстрока , которая встречается в начале ; аналогично, суффикс строки — это подстрока , которая встречается в конце .
Подстроки строки « apple » будут следующими: « a », « ap », « app », « appl », « apple », « p », « pp », « ppl », « pple », « pl », « ple », « l », « le », « e », «» (обратите внимание на пустую строку в конце).
Строка является подстрокой (или фактором) [1] строки, если существуют две строки и такие, что . В частности, пустая строка является подстрокой каждой строки.
Пример: строка равна подстрокам (и подпоследовательностям) с двумя различными смещениями:ana
banana
банан ||||| ана|| ||| ана
Первое вхождение получено с помощью и , а второе вхождение получено с помощью и , являющихся пустой строкой.b
na
ban
Подстрока строки — это префикс суффикса строки и, что эквивалентно, суффикс префикса; например, nan
является префиксом nana
, который в свою очередь является суффиксом banana
. Если является подстрокой , то это также подпоследовательность , что является более общей концепцией. Вхождения заданного шаблона в заданную строку можно найти с помощью алгоритма поиска строк . Поиск самой длинной строки, которая равна подстроке двух или более строк, известен как задача о самой длинной общей подстроке . В математической литературе подстроки также называются подсловами (в Америке) или факторами (в Европе). [ необходима цитата ]
Строка является префиксом [1] строки, если существует строка такая, что . Собственный префикс строки не равен самой строке; [2] некоторые источники [3] дополнительно ограничивают собственный префикс непустым. Префикс можно рассматривать как особый случай подстроки.
Пример: строка ban
равна префиксу (а также подстроке и подпоследовательности) строки banana
:
банан|||запретить
Символ квадратного подмножества иногда используется для обозначения префикса, так что обозначает, что является префиксом . Это определяет бинарное отношение на строках, называемое отношением префикса , которое является особым видом порядка префикса .
Строка является суффиксом [1] строки, если существует строка такая, что . Собственный суффикс строки не равен самой строке. Более ограниченная интерпретация состоит в том, что он также не пуст. [1] Суффикс можно рассматривать как особый случай подстроки.
Пример: строка nana
равна суффиксу (а также подстроке и подпоследовательности) строки banana
:
банан |||| бабушка
Дерево суффиксов для строки — это структура данных trie , которая представляет все ее суффиксы. Деревья суффиксов имеют большое количество применений в строковых алгоритмах . Массив суффиксов — это упрощенная версия этой структуры данных, которая перечисляет начальные позиции суффиксов в алфавитном порядке; он имеет много тех же применений.
Граница — это суффикс и префикс одной и той же строки, например, «bab» — это граница «babab» (а также «baboon eating a kebab»). [ необходима цитата ]
Суперстрока конечного набора строк — это одна строка, которая содержит каждую строку из в качестве подстроки. Например, — суперстрока из , а — более короткая. Конкатенация всех членов из в произвольном порядке всегда дает тривиальную суперстроку из . Нахождение суперстрок, длина которых наименьшая, является более интересной задачей.
Строка, содержащая все возможные перестановки указанного набора символов, называется суперперестановкой .