剑指 Offer 48. 最长不含重复字符的子字符串

//滑动窗口法
class Solution {
    public int lengthOfLongestSubstring(String s) {
        Map<Character,Integer> map = new HashMap<>();
        //最长不重复子串的长度
        int res = 0;
        //滑动窗口的左边界
        int left = -1;
        //开始滑动
        for(int right = 0; right < s.length();right++){
            //如果map中已记录了 右边界的元素,说明重复了,更新左边界left
            if(map.containsKey(s.charAt(right))){
                left = Math.max(left,map.get(s.charAt(right)));
            }
            //哈希表 记录字符及其对应的下标
            map.put(s.charAt(right),right);
            //结果集更新
            res = Math.max(res,right - left);
        }
        return res;
    }
}

 

posted @ 2020-12-16 20:33  peanut_zh  阅读(32)  评论(0编辑  收藏  举报