LC第三题 哪错了help康康

为什么第三个打印出来是11而不是16啊 

import java.util.Map;
import java.util.HashMap;
public class demoSubstring {
    public static void main(String[] args) {
        System.out.println(lengthOfLongestSubstring("abcdeabc"));
        System.out.println(lengthOfLongestSubstring("abcde"));
        System.out.println(lengthOfLongestSubstring("abcdea oabcd efghi jklmn shd"));//oabcde fghij klmns
  }


    public static int lengthOfLongestSubstring(String s) {
        int n = s.length();
        int left = 0;
        int max = 0;
        HashMap<Character ,Integer> map = new HashMap<>();
        
        for(int i = 0; i < n ;i++){
            
            if (map.containsKey(s.charAt(i))) {
                left = Math.max(left,map.get(s.charAt(i))+1);//map.get(获得指定key映射value);  s.charAt将重复2次的字符返回,map.get会将前一个第一个字符K
                                          //字符k的value映射出来 
            }
            max = Math.max(max, i + 1-left);
            map.put(s.charAt(i), i);
            
        }
    
        return max;   
    }
    
}

 

你把空格去掉就是16

 

 你left的值有问题,下次提问描述下要做什么功能,不然看的好累

if (map.containsKey(s.charAt(i))) {
                left = map.get(s.charAt(i))+1;
}