滑动窗口,hashset判断是否有重复字符
class Solution {
public int lengthOfLongestSubstring(String s) {
Set<Character> set = new HashSet<Character>();
int left = 0;
int max = 0;
for(int i = 0; i < s.length();i++){
if(!set.contains(s.charAt(i))){
set.add(s.charAt(i));
max = Math.max(set.size(),max);
}else{
for(int j = left; j < i; j++){
set.remove(s.charAt(j));
if(s.charAt(j)==s.charAt(i)){
left = j+1;
//set不能存储重复字符,所以等去除后在加入
set.add(s.charAt(i));
break;
}
}
}
}
return max;
}
}
1. set不能存储重复字符
右指针往右移,判断有无重复字符,若无,则入set,字符串长度+1;若有,入set,移动左指针,直到左右指针之间的字符串没有重复字符,然后再继续移动右指针。
2.什么时候判断字符串的长度,右指针往右移动时

本文介绍了一种使用滑动窗口和HashSet实现的方法,解决字符串中无重复字符的最长子串问题。通过维护一个字符集合来快速检查字符是否重复,当发现重复时调整窗口,确保子串无重复。
314

被折叠的 条评论
为什么被折叠?



