2
NullЦитата:
И вы еще забыли каждый раз очищать множество.
Да я там вообще какую-то чепуху написал, даже не могу вспомнить, что имел ввиду и чего хотел достичь. :)
Конечно же, нам достаточно написать обычную программульку поиска слова максимальной длины, но параметризовать код некоей функцией
MyLength() которая, в зависимости от намерений ТС, либо работает как стандартная функция вычисления длины строки, либо как функция подсчета различных символов в ней. В последнем случае, да, есть место множествам -- учитываем очередной символ только если его нет в множестве, затем безусловно добавляем его в это множество. Очевидная модификация:
function GetWord(Input: string): string
var
Words: TWords;
CurrentWord: integer;
Result: string;
begin
Words := Split(Input, ' ');
Result := '';
for CurrentWord := 1 to Words.Count do
if MyLength(Words[CurrentWord])>MyLength(Result) then
Result := Words[CurrentWord];
GetWord := Result;
end;
function MyLength(Data: string): integer
var
Character, Result: integer;
Symbols: set of char;
begin
Symbols := [];
Result := 0;
for Character := 1 to Length(Data)
if not (Data[Character] in Symbols) then
begin
Inc(Result);
Symbols := Symbols + [Data[Character]];
end;
MyLength := Result;
end;
Надеюсь, теперь ничего не напутал. :)
Тесты для двух возможных трактовок:
Код:
1) ru www -> ru,
2) ru www -> www.
Цитата:
Можно спросить какой компилятор это скомпилирует?
Да любой, хоть tp, хоть delphi (на паскаль указывают множества). Разумеется, при должном определении
Split(),
TWords и т.д.
P.S.: Очень странная тема, над ней какое-то проклятие и все она никак не завершится. :) Ну в самом деле, нейросети, бинарный поиск с сортировкой, что только здесь не упоминалось; не удивительно, что ТС "смылся" сразу после отправки первого же сообщения, с перепугу-то...