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 许可协议。转载请注明出处!