Post

不定长滑窗

以“无重复字符的最长子串”为例,记录 Go 中两种不定长滑动窗口写法:保存字符位置跳过重复区间,以及维护频次逐步收缩窗口。

算法记录 阅读 35 点赞 0 评论 0

3. 无重复字符的最长子串

// 记录出现的索引
func lengthOfLongestSubstring(s string) int {
    l, res := 0, 0

    count := make(map[rune]int)

    for r, val := range s {
        index, ok := count[val]
        if ok && index >= l{
            l = index + 1
        }
        count[val] = r
        res = max(res, r - l + 1)
    }
    return res
}
// 通用写法
func lengthOfLongestSubstring(s string) int {
    l, res := 0, 0
    cnt := make(map[rune]int)
    for r, val := range s {
        cnt[val] ++
        for cnt[val] > 1{
            cnt[rune(s[l])] --
            l ++
        }
        res = max(res, r - l + 1)
    }
    return res
}

继续阅读

全部归档

评论