public int lengthOfLongestSubstring(String s) {
//大神想法:比我的简单了很多
int len=s.length();
if(len<=1){
return len;
}
int left=0;
int max=0;
Map<Character,Integer> map=new HashMap<>();
for(int i=0;i<len;i++){
if (map.containsKey(s.charAt(i))){
left= Math.max(left,map.get(s.charAt(i))+1);
}
map.put(s.charAt(i),i);
max=Math.max(max,i-left+1);
}
return max;
/*
//窗口题:双指针的演化
int len=s.length();
if(len<=1){
return len;
}
int res=1;
int left=0;
int rigth=1;
Set<Character> set=new HashSet<>();
set.add(s.charAt(left));
while(rigth<len){
//判断窗口是否能扩大
char c=s.charAt(rigth);
if (!set.contains(c)){
//增加窗口
rigth++;
set.add(c);
res++;
}else {
//如果包含,右移
set.remove(s.charAt(left));
set.add(s.charAt(rigth));
left++;
rigth++;
//然后判断该窗口
while (set.size()<res&&rigth<len){
//继续右移动
left++;
rigth++;
Set<Character> cur=new HashSet<>();
for(int i=left;i<rigth;i++){
cur.add(s.charAt(i));
}
set=cur;
}
}
}
return res;
*/
}