【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.不包含 扩张,更新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);

更多推荐
所有评论(0)