Помощь - Поиск - Пользователи - Календарь
Полная версия: Наибольшая общая часть строк.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Гость
Помогите пожалуйста выполнить задачу.
Есть две строки надо выделить наибольшую общую часть из них.
Я вообще не понял чего это значит?


внимательнее с названием темы!
VBproffi
Цитата
Никаких топиков вида "Помогите!!!!" или "Горю!Сделайте курсовую!!".Эти темы закрываются и удаляются.


(короче все не информативные названия) :nono: ;)

Нодо просомотреть какие значения из второй строки есть в первой и выписать их.
Код


Uses
    CRT;
var
    count    : Byte;
    StrIn,
    StrOut   : String[30];
    FileIn,
    FileOut  : Text;
    ItS, pob : String[30]
begin
    ClrScr;
            Assign(FileIn, 'C:/FileIn.txt');
            Assign(FileOut, 'C:/FileOut.txt');

             Reset(FileIn);
             ReWrite(FileOut);

             ReadLn(FileIn,StrIn);
             Read(FileIn, StrOut);

             For count:= 1 to Length(StrOut) do
                  begin
                       pob:= Copy(StrOut,count,1);
                       If Pos(pob,StrIn) > 0 then
                          ItS:=ItS+pob;
                  end;


             WriteLn(FileOut, ItS);
            Close(FileOut);
            Close(FileIn);
    ReadKey;
end.
klem4
помоему это решается так :

uses
    crt;
var
    s1,s2:string;

function GetMaxStr(var ss1,ss2:string):string;
var
    MaxS,Chek:string;
    i,right,left:integer;

begin

   MaxS:='';

   // ss1 - меньшая

   i:=1;

   repeat

      left:=i;

      right:=length(ss1);

      repeat


         Chek:=copy(ss1,left,right-left+1);


         if (pos(Chek,ss2)>0)and(Length(Chek)>Length(MaxS)) then
          MaxS:=Chek;

         dec(right);


      until(right-left<length(MaxS));

      inc(i);

   until (i>length(ss1));


   GetMaxStr:=MaxS;

End;




Begin

   clrscr;

   write('s1 = '); readln(s1);
   write('s2 = '); readln(s2);

   writeln;

   write('Результат : ');

   if length(s1)<length(s2) then
    writeln(GetMaxStr(s1,s2))
   else writeln(GetMaxStr(s2,s1));

   readln;

End.



зы в некоторых случаях будут лишние проверки, если надо, можно убрать.
volvo
Вообще-то это задача на динамическое программирование: LCS - Largest Common Sequence. Вот тут было решение, если кому интересно: http://www.sumdu.edu.ua/tournament/mathema.../simple/inform/
klem4
Вот это не подойдет ?

Лучше одним постом выше - алгоритм Нудельмана, это то, что нужно...

Сообщение отредактировал volvo - Сегодня, 06:26 PM

Согласен :D
Сообщение отредактировал klem4 - Сегодня, 07:45 PM

Клем, сообщение отрадактирвоанно пишется мелким шрифтом иначе не правдоподобно!
virt
а по клемовской ссылке тоже алгоритм нудельмана.

к тому же он выдает все подстроки максимальной длины ,а по ссылке volvo только одну.

virt, я имел в виду на 1 пост выше того, КУДА ведет ссылка klem4, на то, что ты и выкладывал ;) Просто при редактировании klem4 зачем-то удалил мою ссылку ...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.