Архив исходников программ, модулей и компонентов на Delphi


Начальная страница

Поиск по базе



Операционная система
Настройка приложения
Взаимодействия приложений
Файлы и директории
Строки и символы
Математика
Базы данных
Интернет и сеть
Мультимедиа
Аппаратная часть
VCL
Другие разделы [0]
 

Количество записей в базе - 537
Сегодня добавлено – 0

Поиск в строках



Вернуться к списку функций
 Найти в двух строках самую длинную повторяющуюся подстроку (наивный алгоритм)

 Прислал: Vlad ( 13 января 2010 г. )
©  http://www.webdelphi.ru/2009/07/poisk-v-strokax-naivnyj-algoritm-na-delphi/
 Описание:
Функция, реализующая так называемый "наивный алгоритм" поиска наибольшей повторяющейся последовательности в двух строках. Алгоритм основан на матрице совпадений M размерности n х n. Матрица симметрична относительно диагонали.

 Зависимости:
Windows, SysUtils

 Исходный текст:
{ **** UBPFD *********** by http://kladovka.net.ru/delphibase/ ****
>> Найти в двух строках самую длинную повторяющуюся подстроку (наивный алгоритм)

Функция, реализующая так называемый "наивный алгоритм" поиска наибольшей повторяющейся последовательности в двух строках. Алгоритм основан на матрице совпадений M размерности n х n. Матрица симметрична относительно диагонали.

Зависимости: Windows, SysUtils
Автор:       Vlad
Copyright:   http://www.webdelphi.ru/2009/07/poisk-v-strokax-naivnyj-algoritm-na-delphi/
Дата:        13 января 2010 г.
***************************************************************** }

function GetSequence(str1, str2: string): string;
var i,j,max, max_i,max_j:integer;
    Matrix: array of array of integer;
begin
//устанавливаем размерность массива
  SetLength(Matrix, Length(str1));
  for I:=0 to length(Matrix)-1 do
    SetLength(Matrix[i],length(str2));
//строим матрицу
max:=0;
for i:=0 to length(Matrix)-1 do
  for j:=0 to length(Matrix[i])-1 do
    begin
      if (i=0)or(j=0) then
        Matrix[i,j]:=0
      else
       if str1[i]<>str2[j] then
         Matrix[i,j]:=0
       else
         begin
           Matrix[i,j]:=Matrix[i-1,j-1]+1;
           if Matrix[i,j]>max then
             begin
               max:=Matrix[i,j];
               max_i:=i;
               max_j:=j;
             end;
         end;
end;
//Составляем строку по str1 i
result:='';
for I:=max_i-max+1 to max_i do
  Result:=result+str1[i];
end;

 Пример использования:
GetSequence('PABCQRABCSABTU', 'PABCQSDFRETYRT')=>PABCQ


Вернуться к списку функций

Наверх ▲