一:题目
二:上码
class Solution {/**分析:1.滑动窗口问题2.何时更改窗口的起点位置当出现重复的时候 需要从重复的字符的下一个字符开始计算*/public int lengthOfLongestSubstring(String s) {if (s.length() <= 1) {return s.length();}int slowIndex = 0;int fastIndex = 0;int max = 0;Map <Character,Integer> map = new HashMap<>();for (; fastIndex < s.length(); fastIndex++) {//先检查有没有包含的某个字符 比如 容器中已经装入 abc 那么下一个字符a 判断是否含有的时//候 如果有的话 那就要更改在已有字符中的 滑动窗格的左边的位置if (map.containsKey(s.charAt(fastIndex))) {//为何要取和slowIndex进行比较呢 //因为窗口的左边界是不断往左移动的 不能往回走 否则会出现重复的字符被误算其中slowIndex = Math.max(slowIndex,map.get(s.charAt(fastIndex))+1);// slowIndex = map.get(s.charAt(fastIndex))+1;} map.put(s.charAt(fastIndex),fastIndex); //每次计算最大值的时候 就是在计算当前坐标的最大值 比如 abcb 那么当fastIndex指向c的时候//此时求出 max = 3,当指向b的时候 出现了重复 此时需要修改slowindex = 2 max = Math.max(max,fastIndex -slowIndex +1);}return max;}
}
hxd们 俺菜鸡杰又回来了 3 2 1 奏曲…