力扣76. 最小覆盖子串(滑动窗口)

Problem: 76. 最小覆盖子串

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

1.定义两个map集合need和window(以字符作为键,对应字符出现的个数作为值),将子串t存入need中;
2.定义左右指针left、right均指向0(形成窗口),定义int类型变量len记录最小窗口长度,valid记录当前窗口否存最短子串中的字符个数
3.向右扩大窗口,遍历到到的字符c如果在need中时,window[c]++,同时如果window[c] == need[c],则valid++
4.如果valid == need.size(),则表示可以开始收缩窗口,并更新最小窗口禅读(如果移除的字符在need中,同时window[d] == need[d],则valid–,window[d]–);

复杂度

时间复杂度:

O ( n ) O(n) O(n);其中 n n n为字符串 s s s的长度

空间复杂度:

O ( n ) O(n) O(n)

Code

class Solution {
public:/*** Two pointer** @param s Given string* @param t Given string* @return string*/string minWindow(string s, string t) {unordered_map<char, int> need;unordered_map<char, int> window;for (char c: t) {need[c]++;}int left = 0;int right = 0;int valid = 0;// Records the starting index and length of the minimum overlay substringint start = 0;int len = INT_MAX;while (right < s.size()) {//c is the character moved into the windowchar c = s[right];// Move the window rightright++;// Perform some column updates to the data in the windowif (need.count(c)) {window[c]++;if (window[c] == need[c]) {valid++;}}// Determine whether to shrink the left windowwhile (valid == need.size()) {// Update the minimum overlay substringif (right - left < len) {start = left;len = right - left;}//d is the character to be moved out of the windowchar d = s[left];// Move the window leftleft++;// Perform some column updates to the data in the windowif (need.count(d)) {if (window[d] == need[d]) {valid--;}window[d]--;}}}// Returns the minimum overlay substringreturn len == INT_MAX ? "" : s.substr(start, len);}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI视野·今日Sound 声学论文速览 第五十期】Fri, 1 Mar 2024

AI视野今日CS.Sound 声学论文速览 Fri, 1 Mar 2024 Totally 9 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Probing the Information Encoded in Neural-based Acoustic Models of Automatic Speech Recognition Systems Authors Quentin Raymondau…

蓝月亮,蓝禾,三七互娱,顺丰,康冠科技,金证科技24春招内推

蓝月亮&#xff0c;蓝禾&#xff0c;三七互娱&#xff0c;顺丰&#xff0c;康冠科技&#xff0c;金证科技24春招内推 ①蓝月亮 【招聘岗位】技术&#xff0c;研发&#xff0c;lT&#xff0c;供应链&#xff0c;市场&#xff0c;职能等 【网申链接】https://sourl.cn/NsVxG6 【内…

Git分布式管理-头歌实验本地版本库

一、本地版本库创建 任务描述 本地Git操作三部曲是“修改-添加-提交”&#xff0c;即先要在本地仓库进行添加、删除或编辑等修改&#xff0c;然后将本地所做的修改添加至暂存区。添加至暂存区的这些本地修改&#xff0c;并未提交到本地仓库&#xff0c;需要执行提交命令才能将暂…

CAN通信篇 - CanTrcv模块配置(二)

文章目录 CanTrcvConfigSetCanTrcvChannelCanTrcvDioChannelAccess 总结 CanTrcv模块配置也比较简单&#xff0c;主要是配置CanTrcv的行为。有一些工程甚至没有包含CanTrcv配置模块(CanTrcv配置代码已通过手写代码方式嵌入工程)。下图所示为CanTrcv模块配置容器。 CanTrcvConfi…

实名制交友-智能匹配-仿二狗交友系统-TP6+uni-APP小程序H5公众号-源码交付-支持二开!

一、代码风格 通常不同的开发者具备不同的代码风格&#xff0c;但为了保证语音交友系统开发质量&#xff0c;在编码前需要进行代码风格的统一&#xff0c;通过制定一定的规则&#xff0c;约束开发者的行为。具有统一风格的代码才能更清晰、更完整、更容易理解、更方便后期维护…

09 Qt扩展LineEdit组件:Input输入框

系列文章目录 01 Qt自定义风格控件的基本原则-CSDN博客 02 从QLabel聊起&#xff1a;自定义控件扩展-图片控件-CSDN博客 03 从QLabel聊起&#xff1a;自定义控件扩展-文本控件-CSDN博客 04 自定义Button组件&#xff1a;令人抓狂的QToolButton文本图标居中问题-CSDN博客 0…

Mysql80服务无法启动请输入Net helpMsg3534以获得更多的帮助

起因&情景&#xff1a; 朋友正在操作数据库&#xff0c;然后电脑突然死机&#xff0c;再重启电脑后启动数据库服务报&#xff1a; 然后朋友尝试各种操作都没有办法正常启动&#xff0c; 一、网上解决方案&#xff1a;&#xff08;先别操作&#xff09; 1 删掉&#xff1a…

VueUse 安装使用

VueUse 是一个集成了常用的 Vue Composition API 的函数库&#xff0c;它提供了一系列的 hooks 和工具函数&#xff0c;帮助我们更方便地使用 Vue Composition API。在本文中&#xff0c;我将为你介绍如何安装和使用 VueUse。 安装 首先&#xff0c;你需要打开一个终端窗口&a…

如何系统的学习Python——Python社区分享

Python社区非常庞大而活跃&#xff0c;有许多在线论坛、社交媒体群组和本地编程社区。以下是一些值得参与的Python社区&#xff1a; Python官方社区&#xff1a; 简介&#xff1a; Python官方社区提供了许多资源&#xff0c;包括文档、论坛、博客等&#xff0c;是学习和讨论Pyt…

爬取博客的图片并且将它存储到响应的目录

目录 前言 思想 注意 不多说解释了&#xff0c;贴代码吧 config.json Get_blog_img.py 把之前的写的代码也贴上 Get_blog_id.py 主函数 main.py 运行结果 前言 在上一篇博客中我们介绍了如何爬取博客链接 利用python爬取本站的所有博客链接-CSDN博客文章浏览阅读74…

MatteFormer:Transformer-based image matting via prior-tokens

【CVPR2022】MatteFormer: Transformer-Based Image Matting via Prior-Tokens-CSDN博客文章浏览阅读1.2k次。【CVPR2022】 MatteFormer: Transformer-Based Image Matting via Prior-Tokens_matteformerhttps://blog.csdn.net/Thinkobj/article/details/128209388本文核心2点&…

Vmware Fusion 13 安装CentOS、Ubuntu、Windows11虚拟机

Vmware Fusion 13 安装CentOS、Ubuntu、Windows11虚拟机 背景&#xff1a;每次安装都要到处找资源&#xff0c;现在一篇文章足以 文章目录 Vmware Fusion 13 安装CentOS、Ubuntu、Windows11虚拟机一、Mac中安装CentOS虚拟机1️⃣&#xff1a;准备镜像2️⃣&#xff1a;创建虚拟…

引入js,刷新清除缓存

一、这种会让所有的css/js资源重新加载 <meta http-equiv"pragram" content"no-cache"> <meta http-equiv"cache-control" content"no-cache, no-store, must-revalidate">二、加时间戳 每次引入&#xff0c;后面版本号都…

c/c++ | 操作系统 | skynet

这段时间发现一个项目skynet&#xff0c;也不算发现吧&#xff0c;就是花了点时间在这上面 这个项目是一个叫[云凤]的大佬&#xff0c;花了一个月的时间写好的&#xff0c;写的时间好像还是十几年前&#xff1f; 后来这个大佬开了 开了公司&#xff1f; 后来被阿里收购了&#…

GitHub热榜第二的sora同款工具——DUSt3R

目录 Sora - 探索AI视频模型的无限可能 传送门&#xff1a; Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展&#xff0c;AI视频模型已成为科技领域的新热点。而在这个浪潮中&#xff0c;OpenAI推出的首个AI视频模型Sora&#xff0c;以其卓越的性能和前瞻性的技…

apache-maven-3.6.3-bin.zip下载

apache-maven-3.6.3-bin.zip https://acc15t4bm5.feishu.cn/file/boxcnKovgJ7MjwWQ88otCMU24DQ?fromfrom_copylink

《低代码平台开发实践:基于React》读书心得与实战体验

低代码平台开发实践标题 &#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 一、引…

现代信号处理学习笔记(三)信号检测

通过观测数据判断信号是否存在&#xff0c;这一问题称为信号检测。 目录 前言 一、统计假设检验 1、信号检测的基本概念 2、信号检测理论测度 比率测度 概率测度 3、决策理论空间 二、概率密度函数与误差函数 1、概率密度函数 2、误差函数与补余误差函数 三、检测概…

链表简单功能的总结

下面我将通过创建链表&#xff0c;实现链表的增删&#xff0c;打印&#xff0c;对链表进行复习 头文件&#xff1a; #include <stdio.h> #include <stdlib.h> #include <assert.h> typedef struct ListNode { int data; struct ListNode* next; }…

Laya2.13.3在Web条件下使用键盘控制相机移动

需求&#xff1a;在Laya开发时&#xff0c;常常没法移动相机来观察场内的环境&#xff0c;故制作一个移动相机的脚本来是实现此功能&#xff0c;目前先使用键盘后续会添加鼠标控制移动旋转等功能。 onEnable(){this.camera new Laya.Camera(0, 0.1, 100);this._tempVector3 n…