Допустим, вы ищете шаблон * n, * n + 2, * n + 4 и т. Д. И у вас есть следующие строки: s1 = "привет 1, пока 2, ciao 1", s2 = "привет 3, пока 4, чао 2 "и s3 =" привет 5, пока 6, чао 5 ".Затем будет выполнено следующее:
//find all pattern sequences
N1 = findAllPatterns(s1, number);
for i = 2 to n:
for item in Ni-1:
for match in findAllPatterns(si, nextPattern(item))
Ni.add([item, (match, indexOf(match))]);
//for all pattern sequences identify the max common substring
maxCommonLength = 0;
for sequence in Nn:
temp = findLCS(sequence);
if(length(temp[0]) > maxCommonLength):
maxCommonLength = length(temp[0]);
result = temp;
return result;
`Первая часть алгоритма идентифицирует последовательности: [(1, 6), (3, 6), (5, 6)], [(1, 19), (3, 6), (5, 6)], [(2, 12), (4, 12), (6, 12)]
Вторая часть будет указывать: ["hello 1 "," hello 3 "," hello 5 "] как самые длинные подстроки, соответствующие шаблону.
Алгоритм может быть дополнительно оптимизирован путем объединения двух частей и отбрасывания ранних последовательностей, которые соответствуют шаблону, но являются неоптимальными, но я предпочел представить его в двух частях для большей ясности.
- Редактировать фиксированный блок кода