窗口算法可视化

固定窗口与滑动窗口算法对比演示

滑动窗口核心算法代码

def length_of_longest_substring(s):
    # 记录字符最后出现的索引
    char_index = {}
    max_len = 0
    left = 0  # 窗口左边界
    
    for right, char in enumerate(s):
        # 若字符已在当前窗口内,移动左边界到重复位置右侧
        if char in char_index and char_index[char] >= left:
            left = char_index[char] + 1
        
        # 更新字符最新位置和最大长度
        char_index[char] = right
        max_len = max(max_len, right - left + 1)
    
    return max_len

算法执行过程:

当前状态

左指针 (left): 0

右指针 (right): 0

当前窗口: []

最长子串

长度: 0

子串:

步骤说明

点击"开始"按钮启动演示

演示控制:

滑动窗口算法原理:

滑动窗口算法通过两个指针(left和right)维护一个动态调整大小的窗口,用于寻找字符串中不含有重复字符的最长子串:

  1. 初始化left=0,right=0,使用哈希表记录字符最后出现的位置
  2. right指针向右移动,扩大窗口范围
  3. 如果遇到重复字符且该字符在当前窗口内(即char_index[char] >= left),则将left指针移动到该字符上次出现位置的右侧
  4. 更新字符最新位置和最长子串长度
  5. 重复步骤2-4,直到right指针到达字符串末尾

核心特点:窗口大小动态变化,左指针只向前移动,时间复杂度O(n)。