class Solution {
//滑动窗口解决无重复字符最长字串
//时间复杂度O(2n)= O(n),
public int lengthOfLongestSubstring(String s) {
//如果字符串长度小于一返回n
int n = s.length();
if(n<=1){
return n;
}
//定义最长长度maxLen
int maxLen=1;
//定义左右指针
int left = 0;
int right = 0;
//定义一个集合代表滑块
Set<Character> gj=new HashSet<>();
while(right<n){
char rightChar = s.charAt(right);
//contains方法查找set里面是否有重复值,如果有滑块删除到指定位置
while(gj.contains(rightChar)){
gj.remove(s.charAt(left));
left++;
}
//比较长度大小, 第 left 到 right个字符是一个极长的无重复字符子串
maxLen=Math.max(maxLen,right-left+1);
//添加滑块数据
gj.add(rightChar);
right++;
}
//返回无重复字符长串
return maxLen;
}
}
09-03
1078
09-04
395