![]() |
|
|
Регистрация | << Правила форума >> | 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. |