力扣学习笔记——3. 无重复字符的最长子串
解法一:滑动窗口+哈希表
解题思路
本题主要用的是滑动窗口的思想,那么滑动窗口是什么呢?
滑动窗口,一种在数据序列上处理数据的抽象概念与算法技巧,广泛应用于数组、字符串、数据流处理等场景,常用于解决各类区间相关的优化问题
简单来说,就是一个根据条件自由变换的区域,该区域根据条件将会遍历完数组,如:
tips: 按键盘上下键也可以切换哦,如果无法看幻灯片,下面有gif
动图版:

做到这一步基本就完成题目要求了,剩下只需要统计最大子串的长度了,只需要按照以下流程遍历:
判断哈希表中是否有当前位置的字符串
有的话就
left++也就是收缩左边界,并且删除哈希表中的做左边界字符没有就继续
滑动时,记录
right也就是目前滑动的右边界(当前遍历位置),将其存入哈希表统计当前子串长度和结果哪个大(得出最长子串长度)
实现代码
class Solution {
public int lengthOfLongestSubstring(String s) {
char[] ss = s.toCharArray();
Set<Character> set = new HashSet<>();
int res = 0;
for (int left = 0, right = 0; right < s.length(); right++) {
char ch = ss[right];
while (set.contains(ch)) {
set.remove(ss[left]);
left++;
}
set.add(ch);
res = Math.max(res, right - left + 1);
}
return res;
}
}
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 zxb
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

