方法一:滑动窗口
思路:
定义一个左右指针,来存储窗口开始和结束的位置,定义一个Set来模拟窗口,右指针向右移动,当Set不包含当前值时,将当前值加入Set,同时当前长度+1,右指针继续向右移动,如果Set包含当前值,则从左指针位置开始,依次删除Set中的值,直到Set中不包含当前值。
class Solution03 {
public int lengthOfLongestSubstring(String s) {
int left = 0, right = 0, length = 0, maxLength = 0;
Set<Character> set = new HashSet<>();
while (right < s.length()) {
if (!set.contains(s.charAt(right))) {
set.add(s.charAt(right));
length++;
if (length > maxLength) {
maxLength = length;
}
right++;
} else {
while(set.contains(s.charAt(right))){
set.remove(s.charAt(left));
left++;
length--;
}
set.add(s.charAt(right));
length++;
right++;
}
}
return maxLength;
}
}