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

76、覆盖最小子串

题目:

解答:

哈希表tmap存储t中出现的字符和其出现次数。

本题中最后需要return最小的字符串,因此需要获得左右窗口端点,用ansleft ansright保存。

维护窗口[left,right],用cnt统计tmap中不为0的字符个数。right遍历时将tmap中对应字符-1,直到其为0,表明该字符个数已经足够,那么cnt--。

当cnt==0时,说明所有字符个数都够了。那么窗口已经满足条件,更新ansleft和ansright。

开始移动left,试图寻找更小的窗口,同时更新tmap、cnt,如果还是满足cnt==0那么继续更新ansleft和ansright。

right遍历,最后如果一个满足的窗口都没找到,那么left为初始值,此时return ""即可,否则return s中相应的字符串。

class Solution {
public:string minWindow(string s, string t) {unordered_map<char,int> tmap;int slen = s.size();int tlen = t.size();for(int i = 0 ;i<tlen;i++){tmap[t[i]]++;}int cnt = tmap.size();int left = 0,right = 0,ansleft=-1,ansright=slen;for(right;right<slen;right++){if(tmap.contains(s[right])){tmap[s[right]]--;if(tmap[s[right]]==0){cnt--;}}while(cnt==0){if(ansright-ansleft>right-left){ansright=right;ansleft=left;}if(tmap.contains(s[left])){if(tmap[s[left]]==0)cnt++;tmap[s[left]]++;}left++;}}return ansleft==-1 ? "" : s.substr(ansleft,ansright-ansleft+1);}
};

时间复杂度O(m+n) 需要分别遍历两个数组

空间复杂度O(C) C为数据集字符个数

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

相关文章:

  • 【STM32】通用定时器PWM
  • 漫漫数学之旅046
  • ThreadLocal的挑战与未来:在响应式编程与虚拟线程中的演变
  • ARMv8 创建3级页表示例
  • 【嵌入式电机控制#11】PID控制入门:对比例算法应用的深度理解
  • Python数据容器-str
  • ch03 部分题目思路
  • 数据驱动实时市场动态监测:让商业决策跑赢时间
  • 端到端矢量化地图构建与规划
  • Solidity——什么是selfdestruct
  • Java线程池知识点
  • RAG技术新格局:知识图谱赋能智能检索与生成
  • 【机器学习笔记Ⅰ】2 线性回归模型
  • 图灵完备之路(数电学习三分钟)----逻辑与计算架构
  • 在phpstudy环境下配置搭建XDEBUG配合PHPSTORM的调试环境
  • ESMFold 安装教程
  • 手动使用 Docker 启动 MinIO 分布式集群(推荐生产环境)
  • list和list中的注意事项
  • 三位一体:Ovis-U1如何以30亿参数重构多模态AI格局?
  • K8s系列之:Kubernetes 的 RBAC (Role-Based Access Control)
  • 定时器怎么玩?做个LED渐变灯练手
  • 【面板数据】全球贸易救济立案案件(1995-2024年)
  • xyctf2025第三届京麒CTF
  • STM32之继电器模块
  • 11.6 ChatGPT训练第一步:深度解析SFT监督微调核心技术与实战全指南
  • C++ 基于广度优先搜索(BFS)的拓扑排序算法
  • 20250706-9-Docker快速入门(下)-Docker在线答疑_笔记
  • Linux 内存分配理论与水位机制全解
  • Mybatis--动态SQL
  • 前端防抖Debounce如何实现