leetCode 76. 最小覆盖子串 + 滑动窗口 + 哈希Hash

我的往期文章:此题的其他解法,感兴趣的话可以移步看一下:

leetCode 76. 最小覆盖子串 + 滑动窗口 + 图解(详细)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_41987016/article/details/134042115?spm=1001.2014.3001.5501
力扣题: 76. 最小覆盖子串 - 力扣(LeetCode)

文字取自 笨猪爆破组 ,著作权属于该作者,本文只是整理成截图,方便浏览,如有不适,我将删除

关于 滑动窗口的相关知识点和此题的解题思路,可以看来自笨猪爆破组的这篇文章:76. 最小覆盖子串 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/minimum-window-substring/solutions/257928/yi-bu-bu-xing-cheng-hua-dong-chuang-kou-si-lu-shen/

本文就是参考该作者的解题思路做的 C++版本!Thanks♪(・ω・)ノ

C++ 代码: 

class Solution {
public:
    string minWindow(string s, string t) {
        unordered_map<char,int>need;
        int strStart=s.size(),windowLen=s.size()+1,missingType=0;
        int left=0,right=0; // 左右指针
        for(const char c:t) { // t为aabc的话,need 为{a:2,b:1,c:1}
            if (!need[c]) {
                missingType++; // 需要找齐的种类数 +1
                need[c]++;
            }else need[c]++;
        }
        while(right < s.size()) { // 主旋律扩张窗口,超出s串就结束
            char rightChar = s[right];
            if(need.find(rightChar)!=need.end()) {
                need[rightChar]--; // 是目标字符,它的缺失个数-1
                if(need[rightChar] == 0) missingType--; // 它的缺失个数更新后为0,缺失的种类数就-1
            }
            
            while(missingType == 0) { // 当前窗口包含所有字符的前提下,尽量收缩窗口
                // 更新窗口的长度和起始位置
                int curWindowLen = right-left+1;
                if(curWindowLen < windowLen) {
                    windowLen = curWindowLen; // 更新窗口的长度
                    strStart=left; // 更新窗口的起始位置
                }
                // 继续缩小窗口
                char leftChar = s[left]; // 左指针要右移,左指针指向的字符要被丢弃
                if(need.find(leftChar)!=need.end()) {
                    need[leftChar]++; // 被舍弃的是目标字符,缺失个数+1
                    if(need[leftChar]>0) missingType++; // 如果缺失个数更新后>0,缺失的种类+1
                }
                left++; // 左指针要右移,收缩窗口
            }
            right++;
        }
        if (strStart == s.size()) return "";
        return s.substr(strStart, windowLen); // 根据起点和windowLen截取子串
    }
};

推荐和参考文章:

76. 最小覆盖子串 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/minimum-window-substring/solutions/257928/yi-bu-bu-xing-cheng-hua-dong-chuang-kou-si-lu-shen/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java SE 学习笔记(十四)—— IO流(2)

目录 1 字节流1.1 字节流写数据1.1.1 创建字节输出流对象1.1.2 字节流写数据 1.2 字节流读数据1.2.1 创建字节输入流对象1.2.2 字节流读数据 1.3 字节流复制文件1.4 流的刷新与关闭1.5 资源释放方式1.5.1 try-catch-finally1.5.2 try-with-resource 2 字符流2.1 字符流概述2.2 …

PyCharm中文使用详解

PyCharm是一个Python IDE&#xff0c;可以帮助程序员节省时间&#xff0c;提高生产力。那么具体怎么用呢&#xff1f;本文介绍了PyCharm的安装、插件、外部工具、专业功能等&#xff0c;希望对大家有所帮助。 之前没有系统介绍过PyCharm。如何配置环境&#xff0c;如何DeBug&a…

springBoot与Vue共同搭建webSocket环境

欢迎使用Markdown编辑器 你好&#xff01; 这片文章将教会你从后端springCloud到前端VueEleementAdmin如何搭建Websocket 前端 1. 创建websocket的配置文件在utils文件夹下websocket.js // my-js-file.js import { Notification } from element-ui // 暴露自定义websocket对…

MSQL系列(九) Mysql实战-Join算法底层原理

Mysql实战-Join算法底层原理 前面我们讲解了BTree的索引结构&#xff0c;及Mysql的存储引擎MyISAM和InnoDB,今天我们来详细讲解下Mysql的查询连接Join的算法原理 文章目录 Mysql实战-Join算法底层原理1.Simple Nested-Loop Join 简单嵌套循环2.Block Nested-Loop Join 块嵌套…

linux 内存检测工具 kfence 详解(一)

版本基于&#xff1a; Linux-5.10 约定&#xff1a; PAGE_SIZE&#xff1a;4K 内存架构&#xff1a;UMA 系列博文&#xff1a; linux 内存检测工具 kfence 详解(一) linux 内存检测工具 kfence 详解(二) 0. 前言 本文 kfence 之外的代码版本是基于 Linux5.10&#xff0c;…

ORACLE-递归查询、树操作

1. 数据准备 -- 测试数据准备 DROP TABLE untifa_test;CREATE TABLE untifa_test(child_id NUMBER(10) NOT NULL, --子idtitle VARCHAR2(50), --标题relation_type VARCHAR(10) --关系,parent_id NUMBER(10) --父id );insert into untifa_test (CHILD_ID, TITLE, RELATION_TYP…

React 核心与实战2023版

课程亮点: 完整的前后台项目(PC+移动;完成业务;)React 最新企业标准技术栈(React 18 + Redux + ReactRouter + AntD)React + TypeScript (为大型项目奠定了基础)课程内容安排: React 介绍 React 是什么? React 是由Meta公司研发,是一个用于 构建Web和原生交互界面…

支持CT、MR三维后处理的医学PACS源码

医学影像归档与通信系统&#xff08;picture archiving and communication systems&#xff0c;PACS&#xff09;是应用于医院的数字医疗设备&#xff0c;如CT、MR&#xff08;磁共振&#xff09;、US&#xff08;超声成像&#xff09;、X线、DSA&#xff08;数字减影&#xff…

npm更新包时This operation requires a one-time password.

[访问我的npm包](mhfwork/yt-ui - npm) 更新npm包时出现 This operation requires a one-time password.是因为需要认证 解决办法 1. 点击红线处的链接 2. 进入npm官网获取指定秘钥 3. 再次填入 one-time password 即可

word页脚设置,页脚显示第几页共有几页设置步骤

word页脚设置&#xff0c;页脚显示第几页共有几页设置步骤&#xff1a; 具体步骤&#xff1a; 步骤1&#xff1a; 步骤1.1选择页脚---空白页脚 步骤1.2&#xff0c;在"[在此处键入]"&#xff0c;直接输入你需要的格式&#xff0c;如 “第页/共页” 步骤1.3选择第“…

定义USB接口,鼠标类和键盘类都可以作为实现类去实现USB接口

目录 程序设计 程序分析 系列文章 ​ 如图所示,我们电脑上都有USB接口,当我们的鼠标和键盘插上去之后才可以使用,拔出来就关闭使用。其实具体是什么USB设备,笔记本并不关心,只要符合USB规格的设备都可以。鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守USB规范…

财务数字化转型是什么?_光点科技

财务数字化转型是当今企业发展中的一项关键策略&#xff0c;旨在借助先进的数字技术&#xff0c;重新塑造和优化财务管理体系&#xff0c;以适应迅速变化的商业环境。这一转型不仅仅是技术的升级&#xff0c;更是对企业财务理念和流程的全面升级和改革。 财务数字化转型的核心在…

一文了解GC垃圾回收

一文了解GC垃圾回收 1 判断一个对象为垃圾对象的方法 引用计数法(弃用) 可达性分析算法 是否有指向GC root 的引用链&#xff0c;如果有&#xff0c;不是垃圾对象 ---->GC roo:即rt.jar包中内容 2 内存泄漏与内存溢出区别 泄漏&#xff1a;原本需要被回收的对象&#…

Mac版好用的Git客户端 Fork 免激活

Fork是一款强大的Git客户端软件&#xff0c;在Mac和Windows操作系统上都可以使用。汇集了众多先进的功能和工具&#xff0c;可以帮助用户更方便地管理和控制Git仓库。 Fork的界面简洁直观&#xff0c;易于使用。它提供了许多高级的Git功能&#xff0c;如分支管理、合并、提交、…

微信小程序 slot 不显示

问题:创建组件&#xff0c;使用带名字的slot&#xff0c;页面调用组件使用slot不显示 源码&#xff1a; 组件xml <view class"p-item br24" style"{{style}}"><slot name"right" wx:if"{{!custBottom}}"></slot>&l…

【咕咕送书 | 第四期】《ChatGPT 驱动软件开发:AI 在软件研发全流程中的革新与实践》

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《粉丝福利》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 ⛳️ 写在前面参与规则一、前言1.0 人工智能新技术如何创新工作 &#xff1f; 二、内容简介三、作者简介四、专家推…

Spring Boot 使用 Disruptor 做内部高性能消息队列

这里写自定义目录标题 一 、背景二 、Disruptor介绍三 、Disruptor 的核心概念3.1 Ring Buffer3.2 Sequence Disruptor3.3 Sequencer3.4 Sequence Barrier3.5 Wait Strategy3.6 Event3.7 EventProcessor3.8 EventHandler3.9 Producer 四、案例-demo五、总结 一 、背景 工作中遇…

C++in/out输入输出流[IO流]

文章目录 1. C语言的输入与输出2.C的IO流2.1流的概念2.2CIO流2.3刷题常见while(cin >> str)重载强制类型转换运算符模拟while(cin >> str) 2.4C标准IO流2.5C文件IO流1.ifstream 1. C语言的输入与输出 C语言用到最频繁的输入输出方式就是scanf ()与printf()。 scanf…

Stable Diffusion 图生图+ControlNet list index out of range

在webui1.5中用图生图ControlNet批量处理图片的时候报错&#xff1a; controlnet indexError: list index out of range 解决方法&#xff1a; 在controlNet的设置页中勾选不输出检测图即可。 参考&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui/issu…

Makefile三个版本的编写

1.Makefile Makefile是一个工程管理文件&#xff0c;简化编译的流程&#xff0c;完成自动化编译的过程 在Makefile中&#xff0c;会把编译的过程分为两步&#xff0c;先生成.o文件&#xff0c;再对.o文件链接&#xff0c;生成可执行文件 Makefile由变量、函数、和规则构成 2.引…