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

news2024/11/19 8:33:12

Problem: 76. 最小覆盖子串

文章目录

  • 思路
  • 相似滑动窗口题目 :
  • Code

题目
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。
注意:

对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。
如果 s 中存在这样的子串,我们保证它是唯一的答案。

示例 1:

输入:s = “ADOBECODEBANC”, t = “ABC”
输出:“BANC”
解释:最小覆盖子串 “BANC” 包含来自字符串 t 的 ‘A’、‘B’ 和 ‘C’。
示例 2:

输入:s = “a”, t = “a”
输出:“a”
解释:整个字符串 s 是最小覆盖子串。
示例 3:

输入: s = “a”, t = “aa”
输出: “”
解释: t 中两个字符 ‘a’ 均应包含在 s 的子串中,
因此没有符合条件的子字符串,返回空字符串。

思路

思路就是维护一个滑动窗口,窗口[left,right],每次让right右端点右滑动,如果滑动到的字符是t串里面的,就让一个num(记录当前窗口中所包含的t中字符的个数)记录下,当num = t中字符个数,就开始收缩窗口,收缩窗口是从左边left收缩(left++),当收缩到的字符在t中存在,num–。

Note :
如果在每次开始收缩时记录当前的字符串,在266数据会卡内存,所以要改成记录子串的起始start,通过substr(start,len),获取最小子串。

相似滑动窗口题目 :

在这里插入图片描述

Code

class Solution {
public:
    string minWindow(string s, string t) {
        string ans = "" ;
        int n = s.size() ; 
        int left = 0 , right = 0 ; 
        int min_length = 10e5+1 ; 
        int start = 0 ; 
        int num = 0 ; // 记录当前窗口中所包含的t的字符个数
        unordered_map<char,int> window ;
        unordered_map<char,int> smap ; 
        // 先计算出t串中的字符次数 
        for(char v : t) {
            smap[v]++ ; 
        }
        while(right <n){
            char ch = s[right] ; 
            // 右移动
            right++ ; 
            if(smap.count(ch)){
                window[ch]++ ; 
                if(window[ch] == smap[ch]){
                    num++ ; // 包含数+1
                }
            }
            //当全部包含在内时
            while(num == smap.size()) {
                int cur_length = right-left ;
                if(cur_length < min_length){
                    min_length = cur_length ;
                    start = left ; 
                    // 直接记录ans 会卡内存
                    // ans = s.substr(left,min_length) ; 
                }
                char d = s[left] ; 
                left++ ;
                if(smap.count(d)){
                    if(window[d] == smap[d]) {
                        num-- ; // 如果要去掉的是包含的
                    }
                    //收缩左边端点
                    window[d]-- ; 
                }
            }
            
        }
        if(min_length == 10e5+1) return "" ; 

        return s.substr(start,min_length) ; 

    }
};

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

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

相关文章

【尚跑】2023宝鸡马拉松安全完赛,顺利PB达成

1、赛事背景 千年宝地&#xff0c;一马当先&#xff01;10月15日7时30分&#xff0c;吉利银河2023宝鸡马拉松在宝鸡市行政中心广场鸣枪开跑。 不可忽视的是&#xff0c;这次赛事的卓越之处不仅在于规模和参与人数&#xff0c;还在于其精心的策划和细致入微的组织。为了确保每位…

P13 C++ 类 | 结构体内部的静态static

目录 01 前言 02 类内部创建静态变量的例子 03 在类的内部创建静态变量的作用 04 最后的话 01 前言 本期我们讨论 static 在一个类或一个结构体中的具体情况。 在几乎所有面向对象的语言中&#xff0c;静态在一个类中意味着特定的东西。这意味着在类的所有实例中&#xff…

管理类联考——写作——考点+记忆篇——论证有效性分析——记忆

文章目录 论证有效性分析得分要点、寻找漏洞方法论证有效性分析五大逻辑漏洞类型论证有效性分析的具体写法论证有效性分析十大解题思路&#xff08;上&#xff09;方法一&#xff1a;理想法方法二&#xff1a;极端法方法三&#xff1a;其他因素法方法四&#xff1a;可行性法 论…

Vue打包错误UnhandledPromiseRejectionWarning: CssSyntaxError

错误详情如下&#xff1a; building for production...Error processing file: static/css/app.3d5caae7aaba719754d7d5c30b864551.css (node:33011) UnhandledPromiseRejectionWarning: CssSyntaxError: /Users/yt/Documents/BM/sims-plus/sims-website/static/css/app.3d5caa…

无人机电力巡检系统运行流程全解读

随着电力行业体系不断完善&#xff0c;保障电网运营的安全成为至关重要的任务。传统的人工巡检方式在面对电力设备广泛分布和复杂工况时显得效率低下&#xff0c;为了解决这一难题&#xff0c;无人机电力巡检系统应运而生&#xff0c;以智能化的运行流程&#xff0c;为电网安全…

超级应用平台的诞生

摘要&#xff1a;本文介绍了明道云的发展计划和商业模式。明道云将退出直营市场&#xff0c;专注于合作伙伴业务&#xff0c;提供更全面的支持&#xff0c;共同推动数字化能力的发展&#xff0c;实现业绩和终端客户收入的增长。文章强调了明道云与合作伙伴的紧密关系&#xff0…

文件批量改名方法:文件自动批量重命名,提升文件管理效率

在日常工作中随着工作时间的推移&#xff0c;在文件数量日益增长的情况下&#xff0c;会在电脑中积累大量的文件。如果文件名混乱无序&#xff0c;查找和识别重要文件将变得非常困难。这不仅会浪费大量的时间和精力&#xff0c;还可能导致重要文件的丢失或混乱。文件批量改名可…

已解决:Could not find a package configuration file provided by “gazebo_plugins“

问题出现在我使用catkin_make的时候 CMake Error at /home/hiuching-g/catkin_ws/devel/share/catkin/cmake/catkinConfig.cmake:83 (find_package):Could not find a package configuration file provided by "gazebo_plugins"with any of the following names:gaz…

大量索引场景下 Easysearch 和 Elasticsearch 的吞吐量差异

最近有客户在使用 Elasticsearch 搜索服务时发现集群有掉节点&#xff0c;并且有 master 收集节点信息超时的日志&#xff0c;节点的负载也很高&#xff0c;不只是 data 节点&#xff0c;master 和协调节点的 cpu 使用率都很高&#xff0c;看现象集群似乎遇到了性能瓶颈。 查看…

重生之我是一名程序员 41 ——字符串函数(2)

哈喽啊大家晚上好&#xff01;今天呢我们延续昨天的内容&#xff0c;给大家带来第二个字符串函数——strcat函数。 首先呢&#xff0c;还是先带大家认识一下它。strcat函数是C语言中用于将两个字符串连接起来的函数&#xff0c;其函数原型为&#xff1a; char *strcat(char *…

JS事件代理(事件委托)

JS事件代理&#xff08;事件委托&#xff09; 前言什么是事件代理事件代理的优点 事件代理实例代码实例&#xff1a; 总结 前言 本文详细讲解JavaScript中关于事件代理技术相关的内容以及源码实例的讲解。那么好&#xff0c;本文正式开始 什么是事件代理 事件代理作为JavaSc…

C# 使用NPOI操作Excel的工具类

写在前面 NPOI是POI项目的.NET迁移版本。POI是一个开源的Java 读写 Excel、Word 等微软Ole2组件文档的项目&#xff1b;使用NPOI可以在没有安装Office或者相应环境的机器上对Word或Excel文档进行读写操作。 NPOI类库中操作EXCEL有两个模块分别是&#xff1a; 1️.HSSF模块&a…

使用Everything在局域网中对本地电脑上的文件进行搜索

工具-选项-选择Http 服务器-启用HTTP服务器-设置对应的端口即可开启这项服务- 之后当自己的手机或者其他设备位于和Everything位于同一个局域网&#xff0c;就可以使用对应的IP地址和端口进行访问了当然了&#xff0c;首先可以从电脑端进行访问&#xff0c;我们来感受一下 即使…

【C语言分支语句详解】:if,switch,让你的程序流程得心应手!

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; C语言详解 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言&#x1f324;️什么是语句&#xff1f;☁️语句的分类☁️控制语句 &#x1f324;️if语…

模型优化【2】-剪枝[局部剪枝]

模型剪枝是一种常见的模型压缩技术&#xff0c;它可以通过去除模型中不必要的参数和结构来减小模型的大小和计算量&#xff0c;从而提高模型的效率和速度。在 PyTorch 中&#xff0c;我们可以使用一些库和工具来实现模型剪枝。 pytorch实现剪枝的思路是生成一个掩码&#xff0…

jQuery_05 事件的绑定

jQuery可以给dom对象添加事件 在程序执行期间动态的处理事件 jQuery如何绑定事件呢&#xff1f; 1. $("选择器").事件名称(事件处理函数) $("选择器") &#xff1a; 选择0或者多个dom对象 给他们添加事件 事件名称&#xff1a;就是js中事件名称去掉on的部…

C#调用ffmpeg从视频提取图片

微信公众号“CSharp编程大全”的文章《C#从视频提取图片&#xff1f;》介绍了基于Microsoft.DirectX.AudioVideoPlayback.Video类实现从视频提取图片的方式&#xff0c;本来是想学习并测试该类的用法&#xff0c;但实际测试过程中却没有测通。百度从视频提取图片&#xff0c;网…

c语言-字符函数和字符串函数详解

文章目录 1. 字符分类函数2. 字符转换函数3. strlen的使用和模拟实现4. strcpy的使用和模拟实现5. strncpy函数的使用6. strcat的使用和模拟实现7. strncat函数的使用8. strcmp的使用和模拟实现9. strncmp函数的使用10. strstr的使用和模拟实现11. strtok函数的使用12. strerro…

【云原生】什么是 Kubernetes ?

什么是 Kubernetes &#xff1f; Kubernetes 是一个开源容器编排平台&#xff0c;管理着一系列的 主机 或者 服务器&#xff0c;它们被称作是 节点&#xff08;Node&#xff09;。 每一个节点运行了若干个相互独立的 Pod。 Pod 是 Kubernetes 中可以部署的 最小执行单元&#x…

JAVA之异常详解

1. 异常的概念与体系结构 1.1 异常的概念 在Java中&#xff0c;将程序执行过程中发生的不正常行为称为异常 1. 算术异常 public class Test {public static void main(String[] args) {System.out.println(10/0);} } 因为 0 不能当被除数&#xff0c;所以报出了异常&#…