题目
题解
方法
public static int lengthOfLongestSubstring(String s) {
HashSet<Character> charSet = new HashSet<Character>();
int i = 0,l=0,max=0;
for (int j = 0; j < s.length(); j++) {
while (charSet.contains(s.charAt(j))) {
charSet.remove(s.charAt(l));
l++;
}
charSet.add(s.charAt(j));
max = Math.max(max, j+1-l);
}
return max;
}
滑动窗口
开始时左右指针都从0开始移动, 左侧指针固定,移动右侧指针,当窗口内最右侧的字符在set中存在时,左侧指针移动并从set中移除原左侧指针对应的字符,这样再取窗口长度的最大值即可
使用 while 是左指针删除最左侧字符,直到删除到重复字符停止(形象的比喻是滑动)。