0003. 无重复字符的最长子串
题目地址(3. 无重复字符的最长子串)
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
题目描述
前置知识
哈希表
公司
阿里
字节
腾讯
思路
题目要求连续, 我们考虑使用滑动窗口。 而这道题就是窗口大小不固定的滑动窗口题目,然后让我们求满足条件的窗口大小的最大值,这是一种非常常见的滑动窗口题目。
算法:
用一个 hashmap 来建立字符和其出现位置之间的映射。同时维护一个滑动窗口,窗口内的都是没有重复的字符,去尽可能的扩大窗口的大小,窗口不停的向右滑动。
如果当前遍历到的字符从未出现过,那么直接扩大右边界;
如果当前遍历到的字符出现过,则缩小窗口(左边索引向右移动),然后继续观察当前遍历到的字符;
重复(1)(2),直到窗口内无重复元素;
维护一个全局最大窗口 res,每次用出现过的窗口大小来更新结果 res,最后返回 res 获取结果;
最后返回 res 即可;
(图片来自: https://github.com/MisterBooo/LeetCodeAnimation)
关键点
mapper 记录出现过并且没有被删除的字符
滑动窗口记录当前 index 开始的最大的不重复的字符序列
代码
代码支持:C++,Java,Python3
C++ Code:
Java Code:
Python3 Code:
复杂度分析
时间复杂度:$O(N)$
空间复杂度:$O(N)$
最后更新于