|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
|  | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  Поиск самой длинной подстроки... Такая вот задача... Дана строка. Найти в ней самую длинную подстроку, которая повторяется не менее двух раз. Все и вся обыскал, нигде не могу найти решение данной задачи. Заранее спасибо. | 
| 
			 
			#2  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
  Решение задачи не ищется, а просто нужно взять и решить задачу. Всегда ваш КО  П.с.: такую задачу можно решить как минимум 3-мя способами. Срока у тебя string? слова разделены пробелами? или могут быть разделены ",.;:-_"? Какая макс длина твоей строки? Кстати, если задача учебная: разбиваешь задачу на этапы: 1.находишь самое длинное слово. 2.смотришь сколько раз ты его нашел. 3. если 1-н - удаляешь его и к п1. 4. если 2-ва и более - ура ты решил задачу. Последний раз редактировалось Konrad, 13.02.2011 в 13:01. | 
| 
			 
			#3  
			
			
			
			
		 | |||
| 
 | |||
|   Цитата: 
 Возможно я не правильно обьяснил. Подстрока это не слово, со словом я решил задачу довольно давно. Исходный код моей программы: Код: procedure TForm3.Button1Click(Sender: TObject);
begin
  Close;
end;
procedure TForm3.Button2Click(Sender: TObject);
var
//массив в котором будем хранить одинаковые
  mass: array[1..5] of string;
  s,s1,bgs:string;
  i,c,bgi,bgic,h:integer;
  mascount:integer;
begin
// это чтобы выполнился if для самого большего слова, если таковое является последним
  s:=(Edit1.Text)+' ';
//Обнуляем некоторые переменные…
  s1:='';
  c:=0;
  bgs:='';
  bgi:=0;
  bgic:=1;
  mascount:=0;
//Обнуляем все поле для текста
  Memo1.Lines.Clear;
//Начинаем обработку
  for i:=1 to Length(s) do
    begin
      if s[i]<>' ' then
        begin
	//Повышаем счетчик букв
          Inc(c);
//Формируем слово
          s1:=s1+s[i];
        end
      else
        begin
          if c>bgi then
          begin
            bgi:=c;
            bgs:=s1;
            bgic:=1;
            for h:=1 to 5 do
            begin
              mass[h]:=''
            end;
            mascount:=0;
          end
          else if (c=bgi) then
          begin
            Inc(bgic);
            if (c=bgi) and (bgs<>s1) then
            begin
              Inc(mascount);
              mass[mascount]:= s1;
            end;
          end;
          //Обнуляем временные переменные
          s1:='';
          c:=0;
        end;
    end;
    Memo1.Lines.Add('Дана строка:'+Edit1.Text);
    Memo1.Lines.Add('Самая длинная подстрока, в которой количество букв(символов): '+bgs);
    Memo1.Lines.Add('Самая длинная подстрока встречается: '+inttostr(bgic));
    Memo1.Lines.Add('В котором количество букв: '+inttostr(bgi));
    if mass[1]<>'' then
    begin
      Memo1.Lines.Add('Также есть и другие подстроки с одинаковым количеством букв(символов): ');
        for i:=1 to 5 do
        begin
          if mass[i] <>'' then
          Memo1.Lines.Add(mass[i]+' ');
        end;
    end;
end;
procedure TForm3.Button3Click(Sender: TObject);
begin
  Edit1.Text:='';
end;
procedure TForm3.N1Click(Sender: TObject);
var
  i: integer;
begin
  i:=Form4.ShowModal;
end;
end.Помогите пожалуйста переделать, чтобы находила подстроку. Например: аббапролдаббанров ответ: абба Последний раз редактировалось kampeador, 15.02.2011 в 22:24. |