给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。用java实现并详细解释代码内容
时间: 2023-02-23 20:32:35 浏览: 104
答:解答这个问题可以使用滑动窗口算法,该算法主要使用两个指针i和j,分别指向字符串s的开始和结尾。然后遍历字符串s,若在 [i, j] 范围内发现重复字符,则调整i的位置,使其去除重复字符,并计算当前的最大长度,即 maxLen = max(maxLen, j - i + 1);同时移动j以指向下一个字符。在遍历结束后即可得出不含有重复字符的最长子串的长度。代码实现如下:int maxLen = 0;
int i = 0, j = 0;
while (j < s.length()) {
if (set.contains(s.charAt(j))) {
// 去重
set.remove(s.charAt(i++));
} else {
set.add(s.charAt(j++));
maxLen = Math.max(maxLen, j - i);
}
}
return maxLen;
相关问题
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。用java实现的代码是什么并详细解释代码内容
如果使用java实现,可以这样:
1. 遍历s中的每一个字符,将其存入一个HashSet中;
2. 如果HashSet中已经有了这个字符,说明出现了重复字符,此时应该清空HashSet;
3. 如果HashSet中没有,说明这个字符是新的,则将其加入HashSet中;
4. 同时计算HashSet中元素的个数,也就是不重复子串的长度;
5. 遍历完s中的所有字符后,就可以得到最长的不重复子串的长度。
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。用java实现并详细解释
我建议使用滑动窗口的方法来实现。将一个长度为 n 的字符串 s 划分为 n+1 个窗口,每个窗口中都包含一个字符。然后,使用一个 HashSet 存储窗口中出现的字符,如果 HashSet 中出现重复字符,则将窗口左边界右移,直到不再出现重复字符,记录当前窗口的最大长度,然后继续向右移动窗口的右边界,重复上述操作,最后可以得到不含有重复字符的最长子串的长度。
阅读全文
相关推荐















