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