题目链接:
题目描述:
思路:
滑动窗口
- 先固定左边,右边向外扩展,如果右边新增的字符在现在的子串里面,记录这时子串的长度,并把左边向右移,缩小子串
- 怎么判断“新增的字符在现在的子串里面”?
可以把‘现在的子串’放在Set里面,用contains函数
实现代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
Set<Character> set = new HashSet<>();
int n = s.length();
int ans = 0;
for(int l = 0, r = 0; r < n; r++){
//先把旧的移出去再添加新的
while(l <= r && set.contains(s.charAt(r))){
set.remove(s.charAt(l));
l++;
}
set.add(s.charAt(r));
ans = Math.max(ans,r-l+1);
}
return ans;
}
}
- 一般模板
for(int l = 0, r = 0; r < n; r++){ //固定左右起始位置和边界
while(l <= r && 检测是否包含错误情况){
移除使错误情况消失
移动左边界
}
右侧新增
结果计算
}