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,则不变)。

posted on 2022-04-07 10:08  黎酒  阅读(16)  评论(0)    收藏  举报