Longest substring without repeating characters
link
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
## sol 1:
# ret = 0
# n = len(s)
# def isUnique(word):
# return len(word) == len(set(list(word)))
# for i in range(n):
# for j in range(i, n):
# guess = s[i:j+1]
# if isUnique(guess):
# ret = max(ret, len(guess))
# return ret
## sol 2:
# acbc
# [a]cbc, {a: 0}, i=0,j=0
# [ac]bc, {a:0, c:1}, i=0,j=1
# [acb]c, {a:0, c:1, b:2}, i=0,j=2
# ac[bc], {a:0, c:1, b:2}, c:3, i=1+1=2, j=3
ret = 0
j = 0
i = 0
dic = {} # {char: index}
while j < len(s):
char = s[j]
if char in dic:
new_i = dic[char] + 1
if new_i > i:
i = new_i
dic[char] = j
# print(s[i:j+1])
ret = max(ret, j-i+1)
j += 1
return ret