「每日LeetCode」2020年9月22日
本文最后更新于:2023年3月19日 晚上
剑指 Offer 48. 最长不含重复字符的子字符串
剑指 Offer 48. 最长不含重复字符的子字符串
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
提示:
s.length <= 40000
思路
优化的滑动窗口(哈希表)
我们可以使用哈希表记录每个字符的下一个索引,然后尽量向右移动尾指针来拓展窗口,并更新窗口的最大长度。如果尾指针指向的元素重复,则将头指针直接移动到窗口中重复元素的右侧。
算法
tail 指针向末尾方向移动;
如果尾指针指向的元素存在于哈希表中:
head 指针**跳跃到重复字符的下一位**
;
更新哈希表和窗口长度。
作者:z1m
链接:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/solution/tu-jie-hua-dong-chuang-kou-shuang-zhi-zhen-shi-xia/
注意判断map.get(s[end]) >= start
时,即点在窗口中时,才是出现重复值。
解答
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!