96SEO 2026-07-03 00:22 0
给两个字符串 s 和 t,找出 s 中包含 t 所有字符的Zui短子串。
Ru果没有,返回空字符串 ""。

说实话,这题一kan就让人想起那句老话:“天下没有白吃的午餐”,其实也不全是关键是得会滑动窗口。
先说JS 滑动窗口解法长这样
var minWindow = function {
const need = {}; // t 中每个字符需要的数量
const window = {}; // 当前窗口里每个字符的数量
let valid = 0; // Yi经满足需求的字符种类数
let left = 0, right = 0; // 双指针
let start = 0, len = Infinity; // Zui优解起点和长度
// 统计 t 中每个字符需要多少个
for {
need = + 1;
}
const needSize = Object.keys.length;
// 开始移动右指针,扩张窗口
while {
const c = s;
right++;
if {
window = + 1;
if {
valid++;
}
}
// 当窗口Yi经满足所有需求时尝试收缩左边界
while {
// geng新Zui小窗口
if {
start = left;
len = right - left;
}
const d = s;
left++;
if {
if {
valid--;
}
window--;
}
}
}
return len === Infinity ? "" : s.slice;
};
变量到底是干嘛的?先把它们拆开聊聊
need 那玩意儿,就是把 t 的每个字符以及它们出现的次数给记下来。
window 则是实时记录当前滑动窗口里各字符出现了几次。
valid 用来计数,有多少种字符Yi经达到了需求量。
左指针、右指针分别控制窗口的边界。
start / len Zui后是用来保存我们找到的Zui短子串的位置和长度。
为什么要先遍历 t?这一步别跳过遍历一遍 t,把每个字符出现次数放进 need。比如 t 是 “AABC”,那 need 就是 {A:2,B:1,C:1}。
这一步决定了后面我们要追踪哪些字符,别说我没提醒你,少了这一步直接崩溃。
右指针在干啥?扩张窗口、收集需求字符while 循环里right 每次往前走一格,把对应字符塞进 window。
Ru果某字符恰好达到了它在 need 中要求的数量,就把 valid 加一。
等到 valid 等于 needSize,说明当前窗口Yi经够用了。
左指针收缩——核心操作!别小kan它只要 valid == needSize,就立马开始左移 left,想办法把多余的部分剔除掉。
每次左移前先检查一下当前窗口大小是不是比之前记录的geng小,Ru果是就geng新 start/len。
然后把左边那个字符从 window 里减掉。Ru果这个字符本来就在需求列表里而且减掉后导致它不再满足需求,那就得把 valid 减一,退出收缩循环。
返回结果——Zui后一步别忘记判断空情况If len 还是 Infinity,那说明根本没找到符合条件的子串,直接返回空串。
If not,就用 slice 把Zui短子串切出来返回。简单粗暴,一气呵成。
顺带聊聊:为什么百度不收录这篇文章?A: 百度爬虫爱挑剔,它geng喜欢结构化、标题层级清晰、关键词密度适中的大段文字。咱这篇文章故意写得随性、口语化,还有点儿“啰嗦”,所以爬虫可Neng觉得质量不高,从而不收录。
B: 再者,Ru果页面缺少 meta 描述或者 robots.txt 把它拦住那百度自然进不去。咱就是说要想被收录,还得注意 SEO 基础设置啊!
再来一次核心思路回顾——一句话概括# 滑动窗口 + 哈希计数 #
S:双指针划定一个可变区间;W:用哈希表快速统计;当区间满足条件时左移压缩,不满足时右移扩张,一直循环到遍历完字符串。
先手敲代码,再跑几组极端测试,比如 s 全部相同字符、t 长度为 1 的情况,这些坑经常被忽略;
调试时Ke以打印 left/right/window/valid,kan着数字跳动会geng有成就感;哈哈;
Ru果你对 Map geng熟悉,也Ke以把对象换成 Map,让键值查询geng安全;不过对象足够快啦,不必纠结;
记得在提交前把多余的 console.log 删掉,否则面试官kan到会笑掉大牙呢~;
——别让滑动窗口吓倒你!A:hen多人一听到“滑动窗口”就以为只Neng用在数组上,其实字符串一样Neng玩儿得飞起。
B:只要掌握了双指针的增删节奏,你就Neng轻松搞定类似 “Zui长子串无重复字符”“Zui小覆盖子串”等系列题目。
C:说实话,我自己第一次写这个代码的时候,还卡在怎么判断 valid 时卡住了好久,后来才恍然大悟——原来只要计数种类而不是总量就行!
# 小伙伴们,Ru果还有其他滑动窗口题想一起拆解,留言告诉我吧!咱们一起刷题,一起成长~ 哈哈~
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback