滑动窗口框架分三步
(1)初始化,一般需要map,map记得对每个字符的value初始化为0.
(2)向右扩大窗口
(3)缩小窗口寻找最优解或者寻找下一组的解
题解:
无重复表示每一个key的value为1
1.进入while循环,对每一个字符串s中存在key的value加一
2.第二个while循环条件如果一个映射关系中value的值大于1了,说明有重复的字符了,就要通过left指针缩小窗口
3.然后记得不断地比较right-left,就是子串长度的大小
class Solution {
public int lengthOfLongestSubstring(String s) {
int left=0,right=0;
int res=0;
char[] arr=s.toCharArray();
HashMap<Character,Integer> map=new HashMap<>();
for(int i=0;i<arr.length;i++){
map.put(arr[i],0);
}
while(right<s.length()){
char c=arr[right];
if(map.containsKey(c)){
map.put(c,map.get(c)+1);
}
right++;
while(map.get(c)>1){
char d=arr[left];
map.put(d,map.get(d)-1);
left++;
}
res=Math.max(res,right-left);
}
return res;
}
}