Это не официальный сайт wikipedia.org 01.01.2023

Наибольшая общая подстрока — Википедия

Наибольшая общая подстрока

Наибольшая общая подстрока (англ. longest common substring) — подстрока двух или более строк, имеющая максимальную длину.

Формально, наибольшей общей подстрокой строк s 1 , s 2 , s n называется строка w , которая удовлетворяет условию w = max ( { w | w s i , i = 1 , n } ) , операция w s i обозначает что строка w является (возможно несобственной) подстрокой строки s i .

Решение задачи поиска наибольшей общей подстроки для двух строк s 1 и s 2 , длины которых m и n соответственно, заключается в заполнении таблицы A i j размером ( m + 1 ) × ( n + 1 ) по следующему правилу, принимая, что символы в строке нумеруются от единицы.

{ A 0 j = 0 , j = 0 n , A i 0 = 0 , i = 0 m , A i j = 0 , s 1 [ i ] s 2 [ j ] , i 0 , j 0 , A i j = A i 1 j 1 + 1 , s 1 [ i ] = s 2 [ j ] , i 0 , j 0.

Максимальное число A u v в таблице это и есть длина наибольшей общей подстроки, сама подстрока:

s 1 [ u A u v + 1 ] s 1 [ u ] и s 2 [ v A u v + 1 ] s 2 [ v ] .

В таблице заполнены значения для строк SUBSEQUENCE и SUBEUENCS:

   SUBSEQUENCE
  000000000000
S 010010000000
U 002000010000
B 000300000000
E 000001001001
U 001000010000
E 000001002001
N 000000000300
C 000000000040
S 010010000000

Получаем наибольшую общую подстроку UENC.

Сложность такого алгоритма составляет O(mn).

См. такжеПравить

ПримечанияПравить