固定窗口与滑动窗口算法对比演示
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)维护一个动态调整大小的窗口,用于寻找字符串中不含有重复字符的最长子串:
核心特点:窗口大小动态变化,左指针只向前移动,时间复杂度O(n)。
窗口起始索引: 0
窗口结束索引: 0
当前窗口和: 0
最大值: 0
对应子数组:
点击"开始"按钮启动演示
固定窗口算法通过维护一个长度固定的窗口,用于计算数组中长度为k的连续子数组的最大和:
核心特点:窗口大小固定不变,通过"减左加右"实现O(1)时间复杂度的窗口和更新,整体时间复杂度O(n)。