class Solution { public int lengthOfLongestSubstring(String s) { int len = s.length(), max = 0; //key是字符,value是字符位置 Map<Character, Integer> map = new HashMap<>(); int start = 0;//右指针 for (int end = 0; end <len; end++) {//end 是左指针 //当左指针遇到重复字符,并记录1次当前最长值。(右指针跨过前1个重复的字符后作为起始) if (map.containsKey(s.charAt(end))) { //已经被跨过的重复字符不算重复。(右指针只往前走,不往后退。) start = Math.max(map.get(s.charAt(end))+1,start); } int curLen = end-start+1; if(curLen>max){ max = curLen; } map.put(s.charAt(end), end); } return max; } }