Учитывая (на основании вашего комментария), что вы на самом деле не получили алгоритмы, которые вам удалось найти, я предоставил свой код с пошаговыми пояснениями.
Основная концепция - пробежатьстрока, смещая один символ вправо каждый раз, когда вы находите дубликат, и сравнивая длину этих подстрок уникального символа, чтобы найти самую длинную:
//input string
const src = 'thequickbrownfoxjumpsoveralazydog';
//iterate through characters
const longestUniqueSub = str => [...str].reduce((res, char, idx, self) => {
//find first occurence of the 'char'
const charPos = self.indexOf(char, res.anchor);
//if didn't occur before and more chars to check, move on
if(charPos == idx && idx < self.length - 1) return res;
//assign res.len and shift anchor otherwise
return {
len: Math.max(res.len, (charPos < idx ? idx - 1 : idx) - res.anchor + 1),
anchor: charPos < idx ? charPos + 1 : res.anchor
};
}, {anchor: 0, len: 0}).len
//output the result
console.log(longestUniqueSub(src));
.as-console-wrapper {min-height: 100%}