2026-06-250

无重复字符的最长子串

通过滑动窗口实现,但需要注意是窗口内不能出现重复字符

  • 实现思路
    • 通过双指数构建一个滑动窗口,以及map集合判断重复性
    • 将string转化为[]rune, 兼容字符串可能包含汉字的问题
    • 窗口更新条件
      • 无重复字符时,right一直向右移动
      • 出现重复字符时,需要判断重复字符的旧key是否存在于窗口内
        • 存在窗口内,才被判断为当前窗口内的重复
      • 一旦窗口变大,直接更新窗口最大值或者最大窗口的起始结束位置
js
func lengthOfLongestSubstring(s string) int { runes := []rune(s) // 支持 Unicode(中文等) lastIndex := make(map[rune]int) left := 0 maxLen := 0 for right, ch := range runes { if prev, exists := lastIndex[ch]; exists && prev >= left { left = prev + 1 } lastIndex[ch] = right if currLen := right - left + 1; currLen > maxLen { maxLen = currLen } } return maxLen }

本文作者:曹子昂

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!