算法 双指针滑窗——最长不重复问题

典型问题:寻找字符串中最长不重复子串

力扣
https://leetcode.cn/problems/longest-substring-without-repeating-characters/

题解

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        k, res, c_dict = -1, 0, {}
        for i, c in enumerate(s):
            if c in c_dict and c_dict[c] > k:  # 字符c在字典中 且 上次出现的下标大于当前长度的起始下标
                k = c_dict[c]
                c_dict[c] = i
            else:
                c_dict[c] = i
                res = max(res, i-k)
        return res
双指针

指针i从左到右遍历整个字符串一次。
指针k记录当前i对应的左最长不重复子串的起始位置-1。k的起始值为-1。
当某次i移动而k不移动时,i - k即为本次i对应的最长不重复子串长度,将其记录。
最后返回记录的所有长度中最长的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容