LeetCode子串问题经典题目解析
LeetCode子串问题经典题目解析
560. 和为k的子数组
解题思路
- 使用前缀和 + 哈希表优化
- 子数组和可以表示为两个前缀和之差
- 一边计算前缀和一边记录到哈希表
- 查找是否存在 presum-k 的 前缀和
代码实现
1 | class Solution { |
239. 滑动窗口最大值
解题思路
- 使用哈希表记录元素出现次数
- 使用最大堆维护当前窗口最大值
- 移动窗口时:
- 新元素加入堆和哈希表
- 删除元素从哈希表移除
- 堆顶元素不在哈希表中时弹出
代码实现
1 | class Solution { |
76. 最小覆盖子串
解题思路
- 使用两个哈希表:
- 记录目标字符串中字符出现次数
- 记录当前窗口中字符出现次数
- 使用滑动窗口:
- 右指针扩展直到包含所有目标字符
- 左指针收缩优化长度
- 维护最小覆盖子串
代码实现
1 | class Solution { |
总结
子串问题的核心技巧:
- 前缀和 + 哈希表优化
- 滑动窗口 + 数据结构维护
- 双指针 + 状态记录
常见优化方向:
- 空间换时间
- 合理使用数据结构
- 双指针减少遍历次数
评论