思路

滑动窗口+map

代码

自己的

public static int lengthOfLongestSubstring(String s) {
        //定义变量
        int begin=0;
        int end=0;
        HashMap<Character,Integer> map=new HashMap<>();
        int max=0;

        //循环 ,结束条件:end到尾部
        for ( end = 0; end <s.length(); end++) {
            Character curChar=s.charAt(end);
            //判断是否包含
            // 1.不包含 扩张,更新map
            if (!map.containsKey(s.charAt(end)) ) {
                map.put(s.charAt(end),end);
            }
            //2.包含
            // 左缩小:begin更新位置
            // 更新map
            //map.get(s.charAt(end))旧的索引
            else if (map.containsKey(curChar)) {
                begin=max(begin,map.get(curChar)+1);
                map.remove(curChar);
                map.put(curChar,end);
            }
            // 3.判断本次窗口的大小
            // >max,则更新
            int cur=end-begin+1;
            if (cur >max) {
                max=cur;
            }
        }
        return max;
    }

黑马老师的

总结

1.ifelse注意

2.变量初始值设置成什么 的问题==为什么 end从0开始

核心思路:

判断 end 每轮都在做什么

从 谁开始就要这么做

3.为什么begin要max() 二选一

map可能带来什么问题

begin=max(begin,map.get(s.charAt(end))+1);

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐