用滑动窗口的思路来解题。
/**
* @Auther: Mason
* @Date: 2020/06/30/9:41
* @Description: 请你找出其中不含有重复字符的 最长子串 的长度。
*/
public class Solution {
public int lengthOfLongestSubstring(String s) {
if (s == null || s.length() == 0) return 0;
// 用滑动窗口的方法来解决这道题目
// 改变子列开始的字母位置。看看结束的位置在哪里。
int end = 0;
int res = 1;
char tmp;
HashSet<Character> set = new HashSet<>();
set.add(s.charAt(0));
for (int i = 0; i < s.length(); i++) {
if (i >= 1) set.remove(s.charAt(i - 1));
while ((end + 1) < s.length() && !set.contains(tmp = s.charAt(end + 1))) {
set.add(tmp);
end++;
}
res = Math.max(res, end - i + 1);
if (end == s.length() - 1) return res;
}
return res;
}
}