def longest_unique_substring(s: str) -> str:
seen = {}
start = 0
best = (0, 0)
for i, ch in enumerate(s):
if ch in seen and seen[ch] >= start:
start = seen[ch] + 1
seen[ch] = i
if i - start + 1 > best[1] - best[0]:
best = (start, i + 1)
return s[best[0]:best[1]]
print(longest_unique_substring("abcabcdabcbcc"))
print(longest_unique_substring("pwwkew"))
print(longest_unique_substring("bbbbb"))
'''
run:
abcd
wke
b
'''