主要用到了滑动窗口算法
两个指针之间就代表是一个滑动窗口,滑动窗口必须保证没有重复元素,同时保留最大的滑动窗口的大小
利用set数据结构,来验证是不是有重复元素
1:遍历字符数组,如果s.charAt(i)在set中未出现,则将其加入set,并更新maxLength
2:如果s.charAt(i)在set中出现,则进入一个while循环,循环的结束条件是set中不包括s.charAt(i),在循环中,删除第j个字符,j++,直到把set中之前与s.charAt(i)相等的元素删除,然后在set中加入s.charAt(i)。
while循环主要是去删除已经重复的元素,因为是有顺序的,所以得一个一个的删除
看代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
int j=0;
int maxLength=0;
Set set=new HashSet();
if(s.length()==0) return 0;
for(int i=0;i<s.length();i++){
if(!set.contains(s.charAt(i))){
set.add(s.charAt(i));
maxLength=Math.max(maxLength,set.size());
}else {
while(set.contains(s.charAt(i))){
set.remove(s.charAt(j));
j++;
}
}
set.add(s.charAt(i));
}
return maxLength;
}
}