剑指 Offer II 016. 不含重复字符的最长子字符串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。
利用滑动窗口+hashset
当set中包含重复项时,窗口的left++,缩小一直到没有重复项在窗口中,没有重复项的情况下,right++,窗口增大,一直到n结束,每次外层循环都维护长度最大值,取上一次的max和当前的right-left+1
class Solution {
public int lengthOfLongestSubstring(String s) {
int n=s.length();
if(n<=1)return n;
int maxlength=1;
int left=0,right=0;
Set<Character> window=new HashSet<>();
while(right<n){
char rigthchar=s.charAt(right);
while(window.contains(rigthchar)){
window.remove(s.charAt(left));
left++;
}
maxlength=Math.max(maxlength,right-left+1);
window.add(rigthchar);
right++;
}
return maxlength;
}
}