提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目:
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。。
示例
abcabcbb
思路
这题的思路就是滑动窗口,首先从头开始变量并将遍历的字符放入set容器中,直到找到第一个与前面重复的字符(此处记录为右指针停留的位置);如set容器中存在字符为(abc),当遍历下一个字符a是发现重复了,于是就跳出while循环(此循环为遍历得到的最长的不重复的字符串);此时记录下了当前最长长度为3,然后继续for循环此时就将容器中的元素依次移除,移出至右指针在set容器中不存在。此时右指针就能继续向右滑动,重复刚才的动作就能够找到最长的不重复子串。
代码
class Solution {
public int lengthOfLongestSubstring(String s) {
if(s.length() == 0) return 0;
int result = 0;//储存最大结果
int rp = 0;//滑动窗口右边位置
Set<Character> set = new HashSet<>();//存储滑动窗口中不重复的连续子串
//滑动窗口循环从
for (int i = 0; i < s.length(); i++) {
if (i != 0 && set.size() > 0){
set.remove(s.charAt(i - 1));
}
while (rp < s.length() && !set.contains(s.charAt(rp))){
set.add(s.charAt(rp ));
rp++;
}
result = Math.max(result, rp - i);
}
return result;
}
}