1. 滑动窗口算法基础与实战价值
滑动窗口作为字符串处理中的经典技巧,本质上是通过维护一个动态变化的区间来高效解决问题。这个区间就像是我们透过一个可伸缩的窗口观察数据,根据特定条件调整窗口的左右边界。在力扣Hot100中,3.无重复字符的最长子串和438.找到字符串中所有字母异位词这两道题目,恰好展示了滑动窗口的两种典型应用场景。
我初次接触滑动窗口时,常常困惑于窗口移动的条件和边界处理。经过上百次练习后发现,掌握滑动窗口的关键在于明确三点:窗口的初始位置、右移条件和左移条件。比如在无重复字符问题中,右移条件是字符未重复,左移条件是发现重复字符;而在字母异位词问题中,右移固定为窗口长度,左移则同步右移。
提示:滑动窗口问题80%的bug都源于边界条件处理不当,建议在纸上画出窗口移动示意图。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 无重复字符的最长子串深度解析
2.1 哈希表与双指针的协同作战
这道题的暴力解法时间复杂度是O(n²),而滑动窗口可以优化到O(n)。核心思路是:当遇到重复字符时,不是回退到起点重新扫描,而是将左边界直接跳到重复字符的下一个位置。
python复制def lengthOfLongestSubstring(s: str) -> int:
char_index = {} # 存储字符最后出现的位置
left = max_len = 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
这里有几个易错点:
- 判断条件
char_index[char] >= left确保重复字符在当前窗口内 - 更新字符位置的操作必须放在边界调整之后
- 最大长度计算要在每次右指针移动后执行
2.2 实际调试中的边界陷阱
我在实际编码时曾遇到一个典型错误:当输入为"abba"时,如果没有`
