3 无重复字符的最长子串

40 阅读1分钟

3. 无重复字符的最长子串 - 力扣(LeetCode)

考察滑动窗口和HashMap的使用,不断更新最优解

class Solution {
    public int lengthOfLongestSubstring(String s) {
        //滑动窗口 队列左边出,右边进
        //用HashMap来表示最近一次的字符为key,所在下标为value
        // left = max(left,m.getValue(key)+1)
        Map<Character,Integer> m = new HashMap<>();
        int mm = 0,left = 0;
        for(int i = 0; i < s.length(); i++) {
            if(m.containsKey(s.charAt(i))) {
                left = Math.max(left,m.get(s.charAt(i))+1);
            }
            m.put(s.charAt(i),i);
            mm = Math.max(mm,i-left+1);
        }
        return mm;
    }
}