最长重复子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
1 |
|
我的暴力解法
算法思路:
- 创建一个 hash 表(查询专用)
- 初始化 max,count(计算无重复子串达到的值)
- 当元素没在 hash 表中,加入 hash 表,并且 count+1, max 赋予最大值
- 当 hash 存在,hash 表的值变为零,count =0,结束最里层循环,然后到接下的字符。
1 |
|
暴力法固然简单,其实这之之前,我有想到用一个队列和 hash 组合的,但我只是利用站遍历,并没有运用到窗口滑动的思想。
窗口滑动,核心思想,在队列中 [1,2,3,4],通过某种判断,一步步的弹出首元素。
在这道题中的运用,比如 [a,b,c,a,e],弹出 a,b,c 加入 hash 中,当 加入 a 时,已经有了重复,这个时候队列从 b 开始
模版:
- 左右指针,构建窗口
- 循环–,先增加 右指针–知道不能构建。
- 收缩窗口。也就把窗口减小
- right 继续变动,
- 遍历结束