def length_of_longest_substring(s):
seen={}; best=left=0
for r,c in enumerate(s):
if c in seen and seen[c]>=left: left=seen[c]+1
seen[c]=r; best=max(best,r-left+1)
return best
public int lengthOfLongestSubstring(String s){
Map<Character,Integer> map=new HashMap<>();
int best=0,left=0;
for(int r=0;r<s.length();r++){
char c=s.charAt(r);
if(map.containsKey(c)&&map.get(c)>=left) left=map.get(c)+1;
map.put(c,r); best=Math.max(best,r-left+1);
} return best;
}
Sliding window. enumerate vs index. 'in' vs containsKey().
def length_of_longest_substring(s):
seen={}; best=left=0
for r,c in enumerate(s):
if c in seen and seen[c]>=left: left=seen[c]+1
seen[c]=r; best=max(best,r-left+1)
return best
public int lengthOfLongestSubstring(String s){
Map<Character,Integer> map=new HashMap<>();
int best=0,left=0;
for(int r=0;r<s.length();r++){
char c=s.charAt(r);
if(map.containsKey(c)&&map.get(c)>=left) left=map.get(c)+1;
map.put(c,r); best=Math.max(best,r-left+1);
} return best;
}
1. Slide window 2. Track last seen 3. Move left on repeat