
LeetCode 无重复字符的最长子串 获取字符串中不重复的子串最大长度
初始化一个哈希表来记录字符的最新出现位置。 遍历字符串的每个字符,从左到右扩展窗口。 对于每个字符,检查它是否已经在当前窗口内出现: 记录当前窗口的长度,并更新最大长度。
发布日期:2025-04-05 02:07:50
浏览次数:9
分类:精选文章
本文共 1027 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要找出给定字符串中不含重复字符的最长子串的长度。这个问题可以通过滑动窗口技术结合哈希表来高效地解决。
方法思路
这个问题可以通过滑动窗口法来解决。滑动窗口技术用于维护一个窗口,该窗口内的字符不重复。我们使用哈希表记录字符的最新位置,当遇到重复字符时,调整窗口起点,确保窗口内没有重复字符。一旦遇到重复字符,移除已经用过的字符,更新窗口起点。
具体步骤如下:
- 如果存在,调整窗口起点,确保窗口内没有重复字符。
- 更新字符的最新出现位置。
解决代码
public int lengthOfLongestSubstring(String s) { MapcharMap = new HashMap<>(); int maxLength = 0; int start = 0; for (int end = 0; end < s.length(); end++) { char c = s.charAt(end); if (charMap.containsKey(c)) { start = Math.max(start, charMap.get(c) + 1); } charMap.put(c, end); int currentWindowLength = end - start + 1; if (currentWindowLength > maxLength) { maxLength = currentWindowLength; } } return maxLength;}
代码解释
- 哈希表:用于记录每个字符最后出现的索引,确保我们可以快速查找到重复字符的位置。
- 窗口起点:通过滑动窗口技术动态调整,确保窗口内没有重复字符。
- 窗口长度计算:每次调整窗口起点后,计算当前窗口的长度,更新最长长度。
这个方法的时间复杂度为 O(n),其中 n 是字符串的长度,适用于处理大规模数据。通过动态调整窗口起点,确保了算法的高效性。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月18日 00时17分45秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
kubernetes社区项目生态概览
2025-04-03
Kubernetes网络插件使用详解
2025-04-03
Kubernetes调度单位Pod
2025-04-03
Kubernetes部署Dashboard实战
2025-04-03
Kubernetes集群升级实战
2025-04-03
KuiperInfer深度学习推理框架-源码阅读和二次开发(3):计算图
2025-04-03
KxMenu下拉菜单
2025-04-03
KXML2部分详解(J2ME)
2025-04-03
lambda表达式与匿名内部类与双冒号(::)
2025-04-04
lamp 一键安装
2025-04-04
Lamp(Fpm-Php)基本配置
2025-04-04
laradock 安装使用 kafka
2025-04-04
laravel 5.3 给容器传参
2025-04-04
laravel 5.5 -- Eloquent 模型关联
2025-04-04
laravel mix
2025-04-04
Laravel Passport
2025-04-04
laravel 之 Eloquent 模型修改器和序列化
2025-04-04