用HashSet来维持一个窗口,即可,图示参考:
public int lengthOfLongestSubstring(String s) {
int res=0;
HashSet<Character> set=new HashSet<Character>();
for(int l=0,r=0;r<s.length();r++){
char ch=s.charAt(l);
//重复元素个数不只是一个
while(set.contains(ch)){
set.remove(s.charAt(l++));
}
set.add(ch);
res=Math.max(res,r-l+1);
}
return res;
}