主要思路是滑动窗口,见代码注释
class Solution {
/**
2024.6.16
整体思路就是滑动窗口,两个指针left,right起始值都是0开始,n是字符串长度.length()
用个集合set记录子串里有的字符
right不断往右扩张,遇到set里没有,直接right++,set增加个字符,然后更新最大长度
遇到set里有的,就更新left,left++,直到set里没有没有重复的字符
这样整体遍历下来就可以得到最长的不重复的字符串子串了
*/
public int lengthOfLongestSubstring(String s) {
Set<Character> set=new HashSet<>();
int maxLen=0,left=0,right=0;
while(right<s.length()){
if(!set.contains(s.charAt(right))){
set.add(s.charAt(right));
// 先++,方便后面更新长度
right++;
maxLen=maxLen>(right-left)?maxLen:(right-left);
} else{
set.remove(s.charAt(left));
left++;
}
}
return maxLen;
}
}