算法

·

2 min read

·

- Views

3. 无重复最长子串

Copied

3. 无重复最长子串

Q: 给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。

Input: s = "abcabcbb"

Output: 3 abc bca cab cbb都是

思路

先思考”abcabcbb”这个字符串,可以先考虑用两个指针创建滑动窗口,右指针不断移动 a ⇒ ab ⇒ abc ⇒ abca 右指针指到第二个a时,此时就存在重复了, 因此后续情况可以不考虑了,直接将左指针右移(移动到重复的那个字符的下一个索引位置,这样才没有重复的了), 然后继续移动右指针。

在移动这个过程中需要不断查找区间内是否存在 右指针的值,因此考虑用Map或者Set来降低一下时间复杂度, 因为需要考虑具体索引(有重复时 左指针通过索引能快速找到重复字符 方便移动到重复字符的下一位) 所以说用Map来记录, key是值,value就是索引。

当然要维护一个结果长度,右指针移动的过程中不断取最大值即可。

坑: 要考虑好右指针的值到底是不是在当前区间内, 在使用map记录时,我们取得索引后要判断其是否是当前区间内,否则就会找错。

举个例子 “abba”

Code