from collections import OrderedDict
def get_longest_unique_substring(s):
window = OrderedDict()
longest_end = longest_size = 0
for index, char in enumerate(s):
while char in window:
window.popitem(last=False)
window[char] = True
if (size := len(window)) > longest_size:
longest_end = index + 1
longest_size = size
return s[longest_end - longest_size: longest_end]
print(get_longest_unique_substring('aabcdefdabcdefghijbad'))
ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKCmRlZiBnZXRfbG9uZ2VzdF91bmlxdWVfc3Vic3RyaW5nKHMpOgogICAgd2luZG93ID0gT3JkZXJlZERpY3QoKQogICAgbG9uZ2VzdF9lbmQgPSBsb25nZXN0X3NpemUgPSAwCiAgICBmb3IgaW5kZXgsIGNoYXIgaW4gZW51bWVyYXRlKHMpOgogICAgICAgIHdoaWxlIGNoYXIgaW4gd2luZG93OgogICAgICAgICAgICB3aW5kb3cucG9waXRlbShsYXN0PUZhbHNlKQogICAgICAgIHdpbmRvd1tjaGFyXSA9IFRydWUKICAgICAgICBpZiAoc2l6ZSA6PSBsZW4od2luZG93KSkgPiBsb25nZXN0X3NpemU6CiAgICAgICAgICAgIGxvbmdlc3RfZW5kID0gaW5kZXggKyAxCiAgICAgICAgICAgIGxvbmdlc3Rfc2l6ZSA9IHNpemUKICAgIHJldHVybiBzW2xvbmdlc3RfZW5kIC0gbG9uZ2VzdF9zaXplOiBsb25nZXN0X2VuZF0KCnByaW50KGdldF9sb25nZXN0X3VuaXF1ZV9zdWJzdHJpbmcoJ2FhYmNkZWZkYWJjZGVmZ2hpamJhZCcpKQ==