当前位置: 首页 > news >正文

【力扣-76. 最小覆盖字串[特殊字符]】Python笔记

滑动窗口(双指针)通用框架

解决子串 / 子数组问题的最优范式,核心是左右指针 + 窗口

  • 右指针:扩大窗口,获取新字符
  • 左指针:缩小窗口,优化窗口长度
  • 窗口[left, right]闭区间,动态维护有效区间

哈希表(defaultdict)计数

  • need:统计目标串t中每个字符的所需次数
  • window:统计当前窗口内每个字符的包含次数
  • valid 变量:计数窗口中满足need要求的字符种类数,valid == len(need)表示窗口已覆盖目标串

最小窗口更新逻辑

  • 当窗口有效(valid达标)时,尝试收缩左边界
  • 持续更新最小窗口长度起始索引,最终截取结果

经典算法题:最小覆盖子串(LeetCode 76)

题目描述

给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""

示例

  • 输入s = "ADOBECODEBANC", t = "ABC"
  • 输出"BANC"
最优解法:滑动窗口 + 哈希表
核心思路
  1. 统计t的字符需求到need,初始化窗口计数器window、有效计数valid、窗口起始索引start和最小长度min_len
  2. 右指针遍历s,将字符加入窗口,若满足需求则valid+1
  3. valid达标时,尝试收缩左边界,更新最小窗口
  4. 收缩时移除左边界字符,若不再满足需求则valid-1
代码实现
from collections import defaultdict class Solution: def minWindow(self, s: str, t: str) -> str: need = defaultdict(int) window = defaultdict(int) for c in t: need[c] += 1 left = right = 0 valid = 0 start = 0 min_len = float('inf') while right < len(s): char = s[right] right += 1 if char in need: window[char] += 1 if window[char] == need[char]: valid += 1 while valid == len(need): if right - left < min_len: start = left min_len = right - left d = s[left] left += 1 if d in need: if window[d] == need[d]: valid -= 1 window[d] -= 1 return "" if min_len == float('inf') else s[start:start+min_len]

关键逻辑详解

窗口有效性判断
  • valid == len(need):当前窗口已包含t所有字符且次数达标
  • 仅在窗口有效时执行左移收缩,确保找到最小窗口
最小窗口更新
  • start记录最小窗口的起始索引
  • min_len记录最小窗口长度
  • 最终通过s[start:start+min_len]截取结果
边界处理
  • 初始化min_len为无穷大,避免初始值干扰
  • 若最终min_len仍为无穷大,说明无有效窗口,返回空串

算法复杂度与拓展

复杂度分析
  • 时间复杂度:O(n),n为s长度,每个字符最多入窗、出窗各一次
  • 空间复杂度:O(m),m为t的字符种类数
适用场景拓展

该模板可直接迁移至:

  • 字符串最小覆盖 / 包含问题
  • 子数组和 / 长度类滑动窗口问题
  • 包含指定字符 / 条件的最小区间查找
http://www.jsqmd.com/news/508624/

相关文章:

  • 2026 年 AI 毕业论文格式排版工具全测评:9 款工具破解格式困局
  • Python 脚本学习体系(9个核心节点)【20260318-001篇】
  • 计算机毕业设计之springboot基于微信小程序的社区买菜订购系统的设计与实现
  • 基于FPGA的机器视觉缺陷检测系统:实现铝片表面四种缺陷的源码端测文件集成,采用SSD-Mob...
  • 零基础搭建 AI 测试环境:手把手教程
  • LoRA训练助手Win11兼容性测试:系统优化指南
  • 实时手机检测-通用效果展示:手机边缘定位精准度可视化分析
  • 三菱Fx3U三轴定位控制程序,其中两轴为脉冲输出同步运行360度转盘,3轴为工作台丝杆。 1...
  • openclaw+Nunchaku FLUX.1-dev:开源大模型支持TensorRT加速部署教程
  • Qwen3-VL-4B Pro效果实测:看图说话能力惊艳,细节识别准确率高
  • MATLAB/Simulink仿真:基于下垂控制的蓄电池SOC均衡策略
  • 基于ADRC的永磁同步直线电机Simulink仿真模型
  • Qwen-Image镜像新手指南:RTX4090D用户首次运行Qwen-VL图文推理全流程
  • 基于EVA-02构建智能问答Agent:技术论坛帖子内容归纳与解答
  • 前端入门必学CSS零基础快速入门篇(可用于备赛蓝桥杯Web应用开发) 牛客手把手带刷FE14,FE15:布局_含::after详解+固定定位的核心特点 补充知识点
  • ABAQUS盾构管片精细化建模cae源文件及录屏讲解教程 包含单环和多环两种 一环6块,环宽1.5m
  • 大数据领域分布式存储的存储系统自动化配置
  • 实时口罩检测-通用模型案例分享:快速检测图片中多人口罩佩戴情况
  • 计算机毕业设计 | SpringBoot+vue仓库管理系统 仓储物流管理平台(附源码+论文)
  • RAG 构建,学这四个神级项目就够了
  • AgentCPM在Qt桌面应用中的集成:开发一款本地化的智能研报编写工具
  • AIVideo算法解析:从文本到视频的Transformer架构
  • Qwen3.5-9B多模态token部署详解:早期融合训练架构解析
  • 视频SOP:让标准化作业流程更直观高效
  • lychee-rerank-mm效果实测:相同查询词下不同批次图片排序结果一致性达98%
  • Realistic Vision V5.1 虚拟摄影棚:Visual Studio开发环境配置与调试技巧
  • docker存储卷
  • 文档下载难题终结者:kill-doc智能工具让资料获取效率提升300%
  • 避开街景感知研究的3个大坑:基于Place Pulse数据集的经验总结
  • 无需代码!Bidili Generator可视化界面快速上手指南