Maior substring sem caracteres repetidos

Retorne a substring contígua mais longa que não contenha caracteres repetidos. Se várias substrings tiverem o mesmo comprimento máximo, retorne a que aparece primeiro. Como bônus, tente alcançar um tempo linear.

Exemplo

Program.LongestNonrepeatingSubstring("abcabcbb") ➢ "abc"