Subcadena más larga sin caracteres repetidos

Devuelve la subcadena contigua más larga que no contenga caracteres repetidos. Si varias subcadenas tienen la misma longitud máxima, devuelve la primera que aparece. Como bono, intenta lograr un tiempo lineal.

Ejemplo

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