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.: Очень странная тема, над ней какое-то проклятие и все она никак не завершится. :) Ну в самом деле, нейросети, бинарный поиск с сортировкой, что только здесь не упоминалось; не удивительно, что ТС "смылся" сразу после отправки первого же сообщения, с перепугу-то...