无重复字符的最长子串(七)
一、题目描述
这是 LeetCode 热题 HOT 100 上第三题:无重复字符的最长子串,难度为 中等。
Tag:「哈希表」、「数组」、「滑动窗口」
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
提示:
1、0 <= s.length <= 5 * 104
2、s
由英文字母、数字、符号和空格组成
二、解题思路
暴力解法时间复杂度较高,会达到 O(n^2),故而采取滑动窗口的方法降低时间复杂度
什么是滑动窗口?
其实就是一个队列,比如下图中的 dvdf,进入这个队列(窗口)为 dv 满足题目要求,当再进入 d,队列变成了 dvd,这时候不满足要求。所以,我们要移动这个队列!
如何移动?
我们只要把队列的左边的元素移出就行了,直到满足题目要求!
一直维持这样的队列,找出队列出现最长的长度时候,求出解!
代码:
1 |
|
时间复杂度和空间复杂度分析:
时间复杂度:O(n),其中 n 是字符串的长度。左指针和右指针分别会遍历整个字符串一次
空间复杂度:O(|Σ|),其中 Σ 表示字符集(即字符串中可以出现的字符),|Σ| 表示字符集的大小。在本题中没有明确说明字符集,因此可以默认为所有 ASCII 码在 [0, 128) 内的字符,即 |Σ| = 128。我们需要用到哈希集合来存储出现过的字符,而字符最多有 |Σ| 个,因此空间复杂度为 O(|Σ|)。
三、总结
本道算法题难度中等,主要考察了我们对滑动窗口的掌握,定义好左右指针,结合 map 在合适的时候移动指针,并能轻松的解决该题
好了,本篇文章到这里就结束了,感谢你的阅读🤝
无重复字符的最长子串(七)
https://sweetying520.github.io/2022/08/09/A7-无重复字符的最长子串(七)/