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

76.最小覆盖子串

在这里插入图片描述

解题思路:滑动窗口 + 哈希表

这是滑动窗口的经典题型,我们的目标是在字符串 s 中寻找一个最小长度的窗口,该窗口内包含 t 的全部字符(包括数量)。

思路步骤:

  1. 使用两个哈希表:

    • need:记录 t 中每个字符的需求数量;
    • window:记录当前窗口中每个字符的出现次数。
  2. 使用双指针 leftright 维护一个动态窗口 [left, right)

    • right 扩大窗口;
    • 当窗口满足条件后,left 开始收缩窗口以寻找更短的解。
  3. 使用 valid 变量表示当前窗口中满足要求的字符种类数。

    • 每当 window[c] == need[c],就说明字符 c 满足了需求。
  4. 在每次窗口满足条件时尝试更新最短子串长度。


完整代码(C++)

class Solution {
public:string minWindow(string s, string t) {unordered_map<char, int> need, window;int left = 0, right = 0;int start = 0;int len = 1e9;  // 初始设为一个很大的值int valid = 0;// 统计目标字符频率for(char c : t){need[c]++;}while(right < s.size()){// 扩大窗口char c = s[right++];if(need.count(c)){window[c]++;if(window[c] == need[c]){valid++;}}// 尝试缩小窗口while(valid == need.size()){// 更新最小覆盖子串if(right - left <= len){len = right - left;start = left;}char d = s[left++];if(need.count(d)){if(window[d] == need[d]){valid--;}window[d]--;}}}return len == 1e9 ? "" : s.substr(start, len);}
};

关键细节说明

解释
need.count(c)判断字符是否是目标字符
valid 的维护只有当字符数量恰好满足才算“有效”
window[c]++ / --始终更新当前窗口的字符频率
len == 1e9用于判断是否找到合法子串

复杂度分析

  • 时间复杂度O(n)
    每个字符最多进窗口一次、出窗口一次,因此整体为线性时间。

  • 空间复杂度O(|t| + |s|)
    两个哈希表用于存储字符频率。



http://www.dtcms.com/a/304665.html

相关文章:

  • 线性回归原理与进阶
  • MySQL数据库 mysql常用命令
  • pvc怎么扩容
  • 深入解析Java元注解与运行时处理
  • Linux之网络部分-应用层协议 HTTP
  • 【RK3588部署yolo】算法篇
  • StackingClassifier参数详解与示例
  • 博创软件数智通OA平台:高效协同,安全办公新选择
  • 深度学习 目标检测常见指标和yolov1分析
  • Xilinx高性能低延时PCIe-DMA控制器IP,SGDMA,QDMA,RDMA,CDMA,V4L2驱动,视频采集、AD采集
  • ubuntu:运行gcfsd-admin守护进程需要认证,解决方法
  • Python 程序设计讲义(28):字符串的用法——格式化字符串:format()方法
  • python中的 @dataclass
  • Java函数式接口深度解析与应用
  • 机器学习笔记(四)——聚类算法KNN、Kmeans、Dbscan
  • 苏州工作机会:迈为股份子公司宸微半导体设备招聘技术文档工程师
  • 2025年AI大模型产业化技术突破,AI 大模型成本骤降 95%?
  • vulhub 02-Breakout靶场攻略
  • Android系统开发 在Android10版本的Framework中添加系统服务
  • 高级机器学习
  • Android 中 实现折线图自定义控件
  • BGP高级特性之ORF
  • spring 使用三级缓存解决循环依赖详解
  • 09 RK3568 Debian11 ES8388 模拟音频输出
  • 【腾讯云】EdgeOne免费版实现网站加速与安全防护
  • AI定义2025世界人工智能大会,腾讯/微美全息立足浪潮催生开源模型生态产业
  • 飞书 —— 多维表格 —— AI生成
  • 【术语扫盲】MCU与MPU
  • Spring框架中自定义标签的解析过程
  • 关于“高帧率放大了模型对位置噪声的敏感性”的理解