https://chase2learn.medium.com/longest-substring-without-repeating-characters-leetcode-solution-9271db5075e6