题目链接
题目描述
解题思路
方法一:滑动窗口
将结果可以看成是一个动态扩容的窗口,窗口的初始大小为1,然后每次遍历找到当前最长无重复串,找到相同的字符时则停止,然后再进行下一个字符的遍历,在遍历之前将滑动窗口直接往后移动一格;
正常来说,是要找到上一次遍历相同的字符对应的位置,然后移动相应的步数,不过这会导致又加了一轮遍历,所以就直接每次遍历移动一格
举例说明:
实现代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
int len = s.length();
if(len < 2) {
return len;
}
Set<Character> container = new HashSet<Character>();
int size = -1;
int ans = 0;
for(int i=0; i<len; i++) {
if(i != 0) {
container.remove(s.charAt(i-1));
}
while (size + 1 < len && !container.contains(s.charAt(size+1))) {
container.add(s.charAt(++size));
}
ans = Math.max(ans, size - i + 1);
}
return ans;
}
}