不含有重复字符的 最长子串 的长度(滑动窗口法)
LeetCode3
题目描述:

“最长子串”,令人很容易想到滑动窗口,而“不含有重复字符”则可以借助哈希表,因此本题思路为滑动窗口+哈希表实现。定义pre和next指针,表示滑动窗口的起始位置和终止位置,用一个ans变量来维护窗口的最小长度。建立一个哈希map,如果表内不含next指向的元素,则将它加入到map中,next后移,继续检查下一个元素,如果表内含有next指向的元素,则先将头元素移出,令头指针pre后移一位,循环判断。

class Solution {
public int lengthOfLongestSubstring(String s) {
int length = s.length();
if (length <= 1){
return length;
}
Map<Character, Integer> map = new HashMap<>();
int pre = 0;
int next = 0;
int ans = 0;
while (next < length){
if (!map.containsKey(s.charAt(next))){
map.put(s.charAt(next),0);
next++;
}else {
map.remove(s.charAt(pre));
pre++;
}
ans = Math.max(ans,next - pre);
}
return ans;
}
}
时间复杂度:O(n)
空间复杂度:O(1)

使用滑动窗口和哈希表的方法,解决LeetCode3中的问题,找到字符串中不含有重复字符的最长子串的长度。通过维护一个滑动窗口,利用哈希表检查每个元素是否重复,更新窗口大小并寻找最大长度。
2820

被折叠的 条评论
为什么被折叠?



