-
2.6
- 四刷还有很多细节没搞懂
- left 就是 for 的 i
- right 是全局的,只随 while 满足条件时前进
- 因为需要 remove 前一个,所以 i>1才要 remove(set 的删除队伍头部元素是指定元素)
- 四刷还有很多细节没搞懂
-
1.22
- 探路者绝不回头,收绳子人慢慢往前走(需判断开头的位置不能收因为下标不合法)
- 用 set 作窗口
-
1.11
- 滑动窗口,就是两个指针,一个指针遍历递增,一个指针扫描判断,记录最大值
- 第二个指针滑动时,需要以边界与是否包含来作为 while 判断
- 每次大遍历时移除前一个窗口元素
class Solution {
public int lengthOfLongestSubstring(String s) {
Set<Character> set = new HashSet<>();
int length = s.length();
int maxLen = 0;
int right = 0;
for(int left=0;left<length;left++){
if(left!=0){
set.remove(s.charAt(left-1));
}
while(right<length&&!set.contains(s.charAt(right))){
set.add(s.charAt(right));
right++;
}
maxLen = Math.max(maxLen,right-left);
}
return maxLen;
}
}- 用set实现滑动窗口
- set中应为Character而不是string
- right和left一开始都在0,从0开始滑动
- 当过了第一个后再开始移除前一个字符