class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        dic = {}
        def encode(ch) -> int:
            if ch not in dic:
                dic[ch] = len(dic)
            return dic[ch]

        l = [0 for i in range(108)]
        rlt = 0
        start = 0
        
        for i, ch in enumerate(s):
            idx = encode(ch)
            if(l[idx] >= 1):
                rlt = max(rlt, i - start )
                # print("now", start, rlt)
                while start < i and l[idx] >= 1:
                    tmp = encode(s[start])
                    start = start + 1
                    l[tmp] -= 1
            l[idx] += 1
            # print(ch, start, l )
        rlt = max(rlt, len(s) - start )
        if rlt == 0: return len(s)
        return rlt

sol = Solution()
print(sol.lengthOfLongestSubstring("abcabcbb"))
print(sol.lengthOfLongestSubstring("bbbbb"))
print(sol.lengthOfLongestSubstring("pwwkew"))
print(sol.lengthOfLongestSubstring("abcde"))
print(sol.lengthOfLongestSubstring("abcdbej"))
print(sol.lengthOfLongestSubstring("bbcdjeb"))
print(sol.lengthOfLongestSubstring(" "))
print(sol.lengthOfLongestSubstring("1 b 234aac 2"))