【Java】【力扣】【字节高频】3.无重复字符的最长字串
思路
滑动窗口+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.不包含 扩张,更新mapif (!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);