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++; // 需要找齐的种类数 +1need[c]++;}else need[c]++;}while(right < s.size()) { // 主旋律扩张窗口,超出s串就结束char rightChar = s[right];if(need.find(rightChar)!=need.end()) {need[rightChar]--; // 是目标字符,它的缺失个数-1if(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]++; // 被舍弃的是目标字符,缺失个数+1if(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/

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

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

相关文章

【软件安装环境配置】VsCode安装和配置各种环境(保姆级)

一、VsCode 下载 1.官网下载 网站&#xff1a;Visual Studio Code - Code Editing. Redefined 打开网站 点击Download 根据操作系统&#xff08;macOS、Windows、Linux&#xff09;和版本下载 下载到本地 注意&#xff1a; 若下载很慢&#xff0c;或者下着下着就暂停了 可…

【设计模式】第15节:行为型模式之“职责链模式”

一、简介 职责链模式&#xff1a;将请求的发送和接收解耦&#xff0c;让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链&#xff0c;并沿着这条链传递这个请求&#xff0c;直到链上的某个接收对象能够处理它为止。 二、优点 分离发送者和接受者易于扩展和维护…

【已解决】VSCode运行C#控制台乱码显示

问题描述 如上图所示&#xff0c;最近在学习C#突然发现我在运行Hello World的时候出现这样的乱码情况。 分析原因 主要是因为VS Code 是UTF-8的编码格式&#xff0c;而我们的PC是Unicode编码&#xff0c;所以我们需要对其进行一个统一即可解决问题。那么知道这个的问题那就开…

MATLAB算法实战应用案例精讲-【图像处理】机器视觉(基础篇)(六)

目录 前言 几个高频面试题目 工业相机与普通相机的差别 一、 工业相机与普通相机的区别

【Docker】如何查看之前docker run命令启动的参数

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

QT之QDir的mkdir()和mkpath()区别

区别 QDir类的mkdir()和mkpath()方法都用于创建目录&#xff0c;但它们在处理多层目录的创建时有所不同。 mkdir()方法&#xff1a;它用于创建一个目录。如果要创建的目录的父目录不存在&#xff0c;则mkdir()方法会失败&#xff0c;不会创建任何目录。mkpath()方法&#xff…

H5游戏源码分享-密室逃脱小游戏(考验反应能力)

H5游戏源码分享-密室逃脱小游戏&#xff08;考验反应能力&#xff09; 预判安全位置&#xff0c;这个需要快速的反应能力 源码 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /&…

Ubuntu 18.04 安装 Python3.8(安装包安装)

一、为什么用安装包&#xff0c;不用apt指令&#xff1f; 在使用apt指令安装时&#xff0c;莫名出现安装后的python3.8中没有pip&#xff0c;并且没有Math库&#xff01;&#xff01;&#xff01; ​​​​ 二、具体步骤 2.0准备环境 # 更新apt apt update # 安装相关包 apt…

1.spark standalone环境安装

概述 环境是spark 3.2.4 hadoop版本 3.2.4&#xff0c;所以官网下载的包为 spark-3.2.4-bin-hadoop3.2.tgz 在具体安装部署之前&#xff0c;需要先下载Spark的安装包&#xff0c;进到 spark的官网&#xff0c;点击download按钮 使用Spark的时候一般都是需要和Hadoop交互的&a…

2.7、图调度功能

introduction PPQ 的图调度功能 展示如何自由调度算子&#xff0c;并实现混合精度推理 code import torch import torchvision from ppq import * from ppq.api import *# ------------------------------------------------------------ # 在这个脚本中&#xff0c;我们将向…

10_4阻塞和非阻塞跟poll和等待队列

阻塞和非阻塞 广泛上的区别就是 应用程序如果非阻塞那读取不到数据就应该马上有返回值 阻塞的话就是在应用程序去read数据,但是设备驱动没有数据,就一直卡住,直到有数据再继续往下 补充阻塞知识,应用层大部分都是阻塞 如果要非阻塞 ,应用程序在打开设备节点的时候填写int fd …

辅助驾驶功能开发-功能规范篇(22)-4-L2级辅助驾驶方案功能规范

1.3.4 LDW系统功能定义 1.3.4.1 状态机 1.3.4.2 功能定义 1.3.4.2.1 信号需求列表 1.3.4.2.2 系统开启关闭 1)初始化 车辆上电后,车道偏离预警系统(LDW)进行初始化,控制器需要在上电后 220ms 内发出第一帧报文,并在 3s 内 完成内部自检,同时上电 3s 内不进行关联系统…

面经——java后端第一天

1.java和c区别是&#xff1f; 性能⾼&#xff1a;C 是⼀种编译型语⾔&#xff0c;可以⽣成⾼效的机器代码&#xff0c;所以在处理⼤量数据和对计算效率有要求的应⽤场景下具有优势&#xff1b; C 和 Java 是两种编程语言&#xff0c;它们之间有很多区别&#xff0c;主要包括以…

计算机网络常识

文章目录 1、HTTP2、HTTP状态码1xx&#xff08;信息性状态码&#xff09;&#xff1a;2xx&#xff08;成功状态码&#xff09;&#xff1a;3xx&#xff08;重定向状态码&#xff09;&#xff1a;4xx&#xff08;客户端错误状态码&#xff09;&#xff1a;5xx&#xff08;服务器…

ActiveMQ

ActiveMQ 安装 下载网址&#xff1a;ActiveMQ 一定要和自己安装的jdk版本匹配&#xff0c;不然会报错 下载到本地之后解压缩 有可能端口号被占用 解除端口号占用&#xff0c;参考&#xff1a;Windows_端口被占用 打开cmd 查询所有的端口号 netstat -nao查询指定端口号 n…

数组元素逆序交换

数组元素逆序交换 例如&#xff1a; 输入&#xff1a; 1,2,3,4,5 输出&#xff1a; 5,4,3,2,1 代码&#xff1a; #include<stdio.h> #define N 5 int main() {int a[N], i, temp;for (i 0; i < N; i) {scanf("%d", &a[i]);}for (i 0; i < N…

C语言选择排序

1.选择排序(Selection sort) 选择排序是简单直观的排序算法。 基本思想&#xff1a;从首元素开始&#xff0c;首元素与它后面的所有元素进行比较&#xff0c;找到数列中最小的元素&#xff0c;与首元素值交换。然后下一个元素与它后面的元素比较&#xff0c;得到第二小的元素…

对Linux线程的理解(什么是线程,线程的创建终止等待分离,线程互斥,Linux常见的锁,线程同步),两万字总结,有这一篇文章就够了!

文章目录 一、什么是线程1.线程是怎样描述的2.线程与进程的区别3.线程的优缺点4.理解Linux的轻量级进程 二、Linux线程控制1.线程创建:pthread_create()2.线程终止:pthread_exit()3.线程等待:pthread_join()4.分离线程:pthread_detach() 三、Linux线程互斥1.互斥量2.线程安全与…

移动端自动化-Appium元素定位

文章目录 Appium元素定位第一类&#xff1a;属性定位第二类&#xff1a;路径定位 常见问题理解appium server 和 appium inspector 以及 appium-python-client的关系 appium是跨平台的&#xff0c;支持OSX&#xff0c;Windows以及Linux系统。它允许测试人员在不同的平台&#x…

我在Vscode学OpenCV 初步接触

OpenCV是一个开源的计算机视觉库&#xff0c;可以处理图像和视频数据。它包含了超过2500个优化过的算法&#xff0c;用于对图像和视频进行处理&#xff0c;包括目标识别、面部识别、运动跟踪、立体视觉等。OpenCV支持多种编程语言&#xff0c;包括C、Python、Java等&#xff0c…