Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.02.2011, 12:21
kampeador kampeador вне форума
Прохожий
 
Регистрация: 18.01.2011
Сообщения: 5
Репутация: 10
По умолчанию Поиск самой длинной подстроки...

Такая вот задача...
Дана строка. Найти в ней самую длинную подстроку, которая повторяется не менее двух раз.
Все и вся обыскал, нигде не могу найти решение данной задачи.
Заранее спасибо.
Ответить с цитированием
  #2  
Старый 13.02.2011, 12:50
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от kampeador
Все и вся обыскал, нигде не могу найти решение данной задачи.
Мда, современные подходы к обучению...
Решение задачи не ищется, а просто нужно взять и решить задачу.
Всегда ваш КО

П.с.: такую задачу можно решить как минимум 3-мя способами.

Срока у тебя string? слова разделены пробелами? или могут быть разделены ",.;:-_"?
Какая макс длина твоей строки?

Кстати, если задача учебная:
разбиваешь задачу на этапы:
1.находишь самое длинное слово.
2.смотришь сколько раз ты его нашел.
3. если 1-н - удаляешь его и к п1.
4. если 2-ва и более - ура ты решил задачу.

Последний раз редактировалось Konrad, 13.02.2011 в 13:01.
Ответить с цитированием
  #3  
Старый 15.02.2011, 22:22
kampeador kampeador вне форума
Прохожий
 
Регистрация: 18.01.2011
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Konrad
Мда, современные подходы к обучению...
Решение задачи не ищется, а просто нужно взять и решить задачу.
Всегда ваш КО

П.с.: такую задачу можно решить как минимум 3-мя способами.

Срока у тебя string? слова разделены пробелами? или могут быть разделены ",.;:-_"?
Какая макс длина твоей строки?

Кстати, если задача учебная:
разбиваешь задачу на этапы:
1.находишь самое длинное слово.
2.смотришь сколько раз ты его нашел.
3. если 1-н - удаляешь его и к п1.
4. если 2-ва и более - ура ты решил задачу.

Возможно я не правильно обьяснил. Подстрока это не слово, со словом я решил задачу довольно давно.

Исходный код моей программы:
Код:
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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter