LCR 016. 无重复字符的最长子串
解题思路
- 窗口内的字符串就是不重复子串
- 每次遇到新的字符 看看窗口内是否存在该字符 如果存在直接剔除 然后调整窗口左边界
- 不存在 添加窗口内部 右边界++
class Solution {
public int lengthOfLongestSubstring(String s) {
if(s.length() <= 1){
return s.length();
}
// 窗口内的字符串就是不重复子串
// 每次遇到新的字符 看看窗口内是否存在该字符 如果存在直接剔除 然后调整窗口左边界
// 不存在 添加窗口内部 右边界++
int res = 1;
int left = 0;
int right = 0;
Set<Character> window = new HashSet<>();
while(right < s.length()){
char ch = s.charAt(right);
// 取出有边界字符 判断窗口内是否存在
// 一直判断有边界字符 移除左边字符 直到和他冲突的左边界字符被移除为止
while(window.contains(ch)){
// 移除字符
window.remove(s.charAt(left));//移除左边界字符
left++;
}
res = Math.max(res,right - left + 1);
window.add(ch);
right++;
}
return res;
}
}