class LengthOfLongestSubstring { public static int lengthOfLongestSubstring(String s) { int start = 0, end = 0, maxLength = 0; HashMap<Character, Integer> hashMap = new HashMap(s.length()); for (end = 0; end < s.length(); end++){ Character rightChar = s.charAt(end); if(hashMap.containsKey(rightChar)){ start = Math.max(hashMap.get(rightChar) + 1, start); } hashMap.put(rightChar, end); maxLength = Math.max(maxLength, end - start + 1); } return maxLength; } }
使用hashMap维护滑动窗口中右端字符最后一次出现的位置。当右端字符重复出现时,窗口滑动,左端 start 值变为 end + 1(如果大于end + 1,则不变)。
浙公网安备 33010602011771号