LeetCode 76:最小覆盖子串(Minimum Window Substring)滑动窗口 ACERS 解析

副标题 / 摘要 最小覆盖子串是“可变滑动窗口 + 计数哈希表”的经典题。本文按 ACERS 模板解释如何判断窗口有效、如何收缩得到最短答案,并给出工程场景与多语言实现。 预计阅读时长:12~15 分钟 标签:滑动窗口、哈希表、字符串 SEO 关键词:Minimum Window Substring, 最小覆盖子串, 滑动窗口, 哈希表 元描述:最小覆盖子串的 O(n) 滑动窗口解法与工程应用,含多语言实现。 目标读者 正在刷 LeetCode 的中级开发者 需要掌握“可变窗口 + 覆盖约束”的算法模板 做文本分析、日志聚合或流式过滤的工程师 背景 / 动机 “在一段序列中找到最短区间覆盖目标集合”在工程中非常常见: 日志告警需要覆盖多种错误码,搜索摘要需要覆盖关键字, 运营分析需要覆盖多个行为标签。 本题提供了一个可复用的窗口收缩模板。 核心概念 可变滑动窗口:右指针扩张直到满足条件,左指针收缩缩短答案 计数哈希表:支持重复字符,必须按次数覆盖 满足条件的计数:判断当前窗口是否“覆盖了全部需要” A — Algorithm(题目与算法) 题目重述 给定字符串 s 和 t,返回 s 中最短的子串,使其包含 t 中的每一个字符(包括重复字符)。 若不存在这样的子串,返回空字符串 ""。 测试用例保证答案唯一。 输入输出 名称 类型 描述 s string 源字符串 t string 目标字符串(需要覆盖的字符与次数) 返回 string 最短覆盖子串或空串 示例 1 s = "ADOBECODEBANC", t = "ABC" 输出 = "BANC" 示例 2 s = "a", t = "a" 输出 = "a" 示例 3 s = "a", t = "aa" 输出 = "" C — Concepts(核心思想) 方法类型 可变滑动窗口 + 频次覆盖判断。 ...

2026年1月20日 · 9 分钟 · map[name:Jeanphilo]

LeetCode 1456:最大元音子串数量的滑动窗口 ACERS 解析

副标题 / 摘要 最大元音子串数量是“固定窗口计数”的标准模板题。本文按 ACERS 结构讲清楚滑动窗口的核心思想,并给出工程场景与多语言实现。 预计阅读时长:10~12 分钟 标签:滑动窗口、字符串、固定窗口 SEO 关键词:Maximum Number of Vowels, 最大元音子串, 滑动窗口, 固定窗口 元描述:滑动窗口求固定长度子串最大元音数,含工程化应用与多语言代码。 目标读者 正在刷 LeetCode / Hot100 的同学 想建立“固定窗口计数”模板的中级开发者 需要做日志/指标窗口统计的工程师 背景 / 动机 固定长度窗口内的最大计数是工程里极常见的需求: 监控系统统计异常峰值、运营分析统计活跃峰值、NLP 统计特征峰值。 如果每次窗口都重新计算,会退化为 O(nk)。 滑动窗口能让每步更新变成 O(1),把整体降到 O(n)。 核心概念 固定滑动窗口:窗口长度固定为 k,只右移一位 增量更新:进入右端元素、移除左端元素 条件计数:只统计满足条件(本题为元音)的元素数量 A — Algorithm(题目与算法) 题目重述 给你一个字符串 s 和整数 k。 返回长度为 k 的子串中,元音字符数量的最大值。 输入输出 名称 类型 描述 s string 只包含小写英文字符 k int 窗口长度 返回 int 任意长度为 k 的子串中最大元音数 示例 1 s = "abciiidef", k = 3 输出 = 3 示例 2 s = "aeiou", k = 2 输出 = 2 C — Concepts(核心思想) 方法类型 固定滑动窗口 + 条件计数。 ...

2026年1月20日 · 6 分钟 · map[name:Jeanphilo]

LeetCode 1513:仅含 1 的子串数量(连续 1 子串计数)ACERS 解析

副标题 / 摘要 这是“连续 1 子串计数”的标准题:用 cur 维护以当前位置结尾的连续 1 长度即可在线累加答案。本文按 ACERS 模板给出清晰模型、工程场景与多语言实现。 预计阅读时长:10~12 分钟 标签:计数、字符串、连续段 SEO 关键词:Number of Substrings With Only 1s, 连续1子串, LeetCode 1513 元描述:在线统计连续 1 子串数量的 O(n) 解法与工程化应用。 目标读者 正在刷 LeetCode / 准备面试的同学 想建立“连续段计数”模板的中级开发者 做日志分析、监控与行为统计的工程师 背景 / 动机 “只含 1 的连续子串数量”看似简单,但它对应一类非常常见的工程统计: 连续事件强度、稳定性评分、连续活跃天数、心跳连续正常等。 掌握这题等于掌握“连续段贡献计数”的可复用模型。 核心概念 连续子串:必须连续,不能跳过元素 连续段(run):一段连续的 1 在线累加(cur 模型):记录以当前位置结尾的连续 1 长度 取模:答案可能很大,需要取 1e9+7 A — Algorithm(题目与算法) 题目重述 给你一个二进制字符串 s,请返回 仅由字符 ‘1’ 组成的子串 的数量。 子串要求连续且非空。 输入输出 名称 类型 描述 s string 只包含 ‘0’ 和 ‘1’ 返回 int 仅含 1 的子串数量(取模) 示例 s = "0110111" 输出 = 9 解释:连续 1 段为长度 2 和 3,贡献分别为 3 和 6,总和 9。 ...

2026年1月18日 · 5 分钟 · map[name:Jeanphilo]

数据结构基础:好数对计数(Number of Good Pairs)哈希统计 ACERS 解析(LeetCode 1512)

副标题 / 摘要 这是“数据结构基础”系列第 2 题:好数对计数。通过“频次统计 + 组合计数”,把 O(n^2) 直接降到 O(n),并给出可直接迁移到工程的实现方式。 预计阅读时长:8~10 分钟 标签:哈希表、计数、数组 SEO 关键词:Good Pairs, 好数对, hash map, frequency, 计数 元描述:好数对计数的哈希表解法与工程化应用,含复杂度分析与多语言代码。 目标读者 刚开始学习哈希表与计数思想的初学者 希望把刷题方法迁移到业务统计的中级工程师 准备面试,想掌握基础计数模型的同学 背景 / 动机 “找出相同元素的两两组合数量”是一个常见的计数类问题。 在数据去重、行为分析、错误归因等场景里,这类问题通常会被反复遇到。 若用双重循环计算,复杂度是 O(n^2);一旦数据规模扩大就会变慢。 因此需要一个可线性扩展的方案。 A — Algorithm(题目与算法) 题目还原 给你一个整数数组 nums。 如果一组数字 (i, j) 满足 nums[i] == nums[j] 且 i < j,就称为一个 好数对。 返回好数对的数目。 输入输出 名称 类型 描述 nums int[] 整数数组 返回 int 好数对数量 基础示例 nums 输出 说明 [1, 2, 3, 1, 1, 3] 4 (0,3) (0,4) (3,4) (2,5) [1, 1, 1, 1] 6 C(4,2) = 6 [1, 2, 3] 0 无重复 直观图示(示例 1) ...

2025年12月30日 · 5 分钟 · map[name:Jeanphilo]

Hot100:Two Sum 两数之和哈希表一遍扫描与 ACERS 工程化解析(LeetCode 1)

副标题 / 摘要 Two Sum(两数之和)是最经典的数组哈希题:用“补数 + 哈希表”把 O(n^2) 降到 O(n)。本文按 ACERS 结构拆解题意、原理与工程迁移,并给出多语言可运行实现。 预计阅读时长:10~12 分钟 标签:Hot100、哈希表、数组、补数、面试高频 SEO 关键词:Two Sum, 两数之和, hash map, 补数, O(n), LeetCode 1, Hot100 元描述:两数之和的哈希表解法与工程应用解析,含复杂度对比与多语言代码。 目标读者 刚开始刷题,希望建立“补数 + 哈希表”基本模型的初学者 需要把算法思路迁移到工程问题的中级开发者 准备面试、想快速掌握高频题的求职者 背景 / 动机 “在一堆数字里找出两数之和”等价于一个快速配对问题,常见于对账、预算、风控、推荐等场景。 朴素暴力法虽然简单,但在数据量上来后会直接超时;哈希表一遍扫描能把复杂度从 O(n^2) 降到 O(n),是最工程可行的做法之一。 A — Algorithm(题目与算法) 题目还原 给定一个整数数组 nums 和一个整数目标值 target,请在该数组中找出和为目标值的 两个 整数,并返回它们的数组下标。 每种输入只会对应一个答案,并且你不能使用两次相同的元素。答案可以按任意顺序返回。 输入输出 名称 类型 描述 nums int[] 整数数组 target int 目标和 返回 int[] 满足 nums[i] + nums[j] == target 的下标 基础示例 nums target 输出 [2, 7, 11, 15] 9 [0, 1] [3, 2, 4] 6 [1, 2] 补数图示(示例 1) ...

2025年12月28日 · 5 分钟 · map[name:Jeanphilo]