Leetcode76. 最小覆盖子串

Java实现 LeetCode 76 最小覆盖子串 76. 最小覆盖子串 给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。 示例: 输入: S = “ADOBECODEBANC”, T = “ABC” 输出: “BANC” 说明: 如果 S 中不存这样的子串,则返回空字符串 “”。 如果 S 中存在这样的子串,我们保证它是唯一的答案。 class Solution { //滑动窗口的应用 ... 阅读详情

Every day a Leetcode

题目来源:76. 最小覆盖子串

解法1:滑动窗口

本题使用滑动窗口求解,即两个指针 l 和 r 都是从最左端向最右端移动,且 l 的位置一定在 r 的左边或重合。注意本题虽然在 for 循环里出现了一个 while 循环,但是因为 while 循环负责移动 l 指针,且 l 只会从左到右移动一次,因此总时间复杂度仍然是 O(n)。

本题使用了长度为 128 的数组来映射字符,也可以用哈希表替代;其中 chars 表示目前每个字符缺少的数量,flag 表示每个字符是否在 T 中存在。

代码:

/*
 * @lc app=leetcode.cn id=76 lang=cpp
 *
 * [76] 最小覆盖子串
 */

// @lc code=start
class Solution
{
public:
    string minWindow(string S, string T)
    {
        vector<int> chars(128, 0);
        vector<bool> flag(128, false);
        // 先统计T中的字符情况
        for (int i = 0; i < T.size(); ++i)
        {
            flag[T[i]] = true;
            chars[T[i]]++;
        }
        // 移动滑动窗口,不断更改统计数据
        int cnt = 0, l = 0, min_l = 0, min_size = S.size() + 1;
        for (int r = 0; r < S.size(); r++)
        {
            if (flag[S[r]])
            {
                if (--chars[S[r]] >= 0)
                    cnt++;
                // 若目前滑动窗口已包含T中全部字符,
                // 则尝试将l右移,在不影响结果的情况下获得最短子字符串
                while (cnt == T.size())
                {
                    if (r - l + 1 < min_size)
                    {
                        min_l = l;
                        min_size = r - l + 1;
                    }
                    if (flag[S[l]] && ++chars[S[l]] > 0)
                        cnt--;
                    l++;
                }
            }
        }
        return min_size > S.size() ? "" : S.substr(min_l, min_size);
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 为字符串 S 的长度。

空间复杂度:O(|∑|),其中字符集大小为 |∑|。

LeetCode 76. 最小覆盖子串 | Python 使用滑动窗口的思想,解决《76. 最小覆盖子串》问题 阅读详情

相关推荐

Leetcode76 最小覆盖子串题解

LeetCode 76 最小覆盖子串讲解,用滑动窗口解决,利用哈希表记录字符变化。

算法笨蛋 703

golang力扣leetcode 76.最小覆盖子串

76.最小覆盖子串76.最小覆盖子串题解代码 76.最小覆盖子串 76.最小覆盖子串 题解 滑动窗口模板题,不知道为啥这也能算hard题 右指针右移之后窗口数据更新 判断窗口是否要收缩 左指针右移之后窗口数据更新 根据题意计算结果 代码 package main import "math" func minWindow(s string, t string) string { wind := make(map[byte]int) need := make(map[byte]int) for i

清风 730

【困难】力扣算法题解析LeetCode76:最小覆盖子串

题目要求找出字符串 s 中涵盖 t 所有字符的最小子串。使用滑动窗口算法,通过双指针动态调整窗口范围:右指针扩展窗口直至覆盖 t 的所有字符,左指针收缩窗口以寻找最小子串。通过字符频率数组记录匹配状态,确保时间复杂度为 O(m+n)。例如,s = "ADOBECODEBANC",t = "ABC" 时,最小覆盖子串为 "BANC"。若无法满足条件(如 s = "a",t = "aa"),返回空字符串。该

ylumwd的博客 913

力扣(LeetCode)100题:76.最小覆盖子串

本文介绍了LeetCode 76题「最小覆盖子串」的滑动窗口解法。该方法使用两个计数器(cnt_s和cnt_t)分别跟踪窗口字符和目标字符串的字符频率,通过比较cnt_s≥cnt_t判断是否满足条件。算法采用"扩张找可行解,收缩找最优解"的策略:right指针扩展窗口,当条件满足时left指针收缩寻找最小窗口。时间复杂度O(|s|+|t|),空间复杂度O(1)(因字符集有限)。关键点包括Python Counter的比较语义和滑动窗口的正确性保证,最后返回满足条件的最短子串或空字符串。

sweet_ran的博客 413

PyMuPDF`库实现PDF旋转功能

本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。通过使用`wx很抱歉,Markdown格式在当前聊天界面无法显示。我将为您提供纯文本格式的博客内容,您可以将其复制到Markdown编辑器中进行格式化。PDF转换工具本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。该工具使用了wxPython和PyMuPDF库。功能该PDF转换工具具有以下功能:1. 选择PDF文件:通过点击“选择文件”按钮,用户可以选择要转换的PDF文件。

Winfredzhang的博客 2736

10xGenomics Loupe Browser实战指南:从数据导入到细胞注释全流程解析

本文提供了10xGenomics Loupe Browser的实战指南,详细解析了从数据导入到细胞注释的全流程。作为一款强大的可视化工具,Loupe Browser能帮助研究者直观探索单细胞测序数据,通过交互式操作进行细胞选择、差异基因分析和细胞类型注释,是单细胞数据分析入门和结果验证的高效平台。

blue42的博客 454

LeetCode76.最小覆盖子串

LeetCode 76.最小覆盖子串 题目描述: 给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。 示例: 输入: S = "ADOBECODEBANC", T = "ABC" 输出: "BANC" 说明: 如果 S 中不存这样的子串,则返回空字符串 ""。 如果 S 中存在这样的子串,我们保证它是唯一的答案。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-window-substrin

qq_40751552的博客 189

基于STM32的可穿戴式多生理参数实时监测与预警系统

针对传统可穿戴健康设备存在的生理参数监测种类单一、数据处理依赖云端导致响应滞后、续航能力弱等问题,设计一种基于STM32的可穿戴式多生理参数实时监测与预警系统。系统以STM32L476RG低功耗微控制器为核心,集成心率血氧传感器、体温传感器、血压传感器,实现人体心率、血氧饱和度、体温、收缩压/舒张压的同步采集;通过边缘端轻量化数据处理算法完成参数异常判定,结合低功耗硬件设计与软件休眠策略,在保证监测精度的同时延长续航。测试结果表明,系统心率监测误差≤2次/分钟,血氧饱和度误差≤2%,体温误差≤±0.2℃,血

m0_74026776的博客 2041

力扣76.最小覆盖子串

力扣76.最小覆盖子串给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""。这道题需要思考一个问题,在代码中如何确定字符串s中涵盖字符串t呢?就比如字符串sBCDEAA,字符串tABC,怎么判断字符串s中涵盖了字符串t?我的做法是用两个数组tArray 和 sArray,分别记录字符串t和字符串s每个字符的数量。若字符串t涵盖字符串s,那么对于任意的字符c,都存在,根据这个就可以判断是否涵盖了。

沉迷写代码的程序猿的博客 1094

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

我哎GIS博客 1666

YOLOv10改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型

本文记录的是基于MobileNet V3的YOLOv10目标检测轻量化改进方法研究。的模型结构是通过得来的,其中的基础模块结合了的深度可分离卷积、的线性瓶颈和倒置残差结构以及MnasNet中基于挤压和激励的轻量级注意力模块,使模型在性能、效率和灵活性方面都具有显著的优势。本文在替换骨干网络中配置了原论文中的small和large2种模型,以满足不同的需求。

Limiiiing的博客 515

LeetCode 76:最小覆盖子串

给定字符串s和t,需找到 st。若不存在则返回空字符串。

m0_75126572的博客 1380

uniapp - 详细实现移动端公众号 H5 网页授权登录流程及示例代码,申请测试公众号全流程及本地调试无需部署上线服务器就能直接调起微信登陆授权页面,手机移动端h5公众号页面利用微登录拿到用户数据!

uni-app,微信公众号,h5网页,uniapp网页端,手机端H5公众号页面,微信网页登陆,uniApp详细实现公众号的登录,微信授权第三方网站登录,流程及逻辑详细教程,OAuth2.0,公众号网页授权,微信网页授权通过code换取网页授权,redirect_url,参数错误,解决,报错,无法调起,如何申请测试公众号,微信公众平台测试号的申请与使用,获取用户openid手机号昵称头像,利用测试号实现本地调试微信登录授权,本地无法调试怎么办,测试公众号,在开发环境下怎么测试,用项目本地ip地址,微信公众号平

🏆 前端领域优质创作者 5065

76. 最小覆盖子串 - 力扣(LeetCode)

通俗来讲,滑动窗口本质还是快慢指针法,一快一慢两个指针前后移动,中间的部分就是窗口。内部没有元素存在, 后续遍历会扩大形成滑动窗口,窗口内包含 t 中所有的字符串。解释:最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。因此首先,在字符串 s 中建立快慢指针放在队首,这里初始窗口设计为。解释: t 中两个字符 'a' 均应包含在 s 的子串中,所有字符的最小字符串片段,对字符的顺序无要求。的长度,说明没有找到有效窗口,返回空字符串。输入:s = "a", t = "a"

q1111111da的博客 2160

大数据知识面试题-通用(2026版)

序列号 内容 链接 1 大数据知识面试题-通用(2022版) 待续… 2 大数据知识面试题-Hadoop(2022版) 待续… 3 大数据知识面试题-MapReduce和yarn(2022版) 待续… 4 大数据知识面试题-Zookeepr (2022版) 待续… 5 大数据知识面试题-Hive (2022版) 待续… 6 大数据知识面试题-Flume(2022版) 待续… 7 大数据知识面试题-Hbase(2022版) 待续… 8 大数据知识面试题-sqoop(....

拉格朗日的学习笔记 2万+

常说的cache机制到底是什么?L1 cache和 L2 cache是什么?

一文带你迅速了解CPU内的cache机制!!图解多核CPU中的多级cache结构。为何有的处理器没有cache?

车载系统攻城狮 5878

76. 最小覆盖子串【 力扣(LeetCode) 】

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

yyh520025的博客 1274

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【力扣76】最小覆盖子串

本文介绍了LeetCode上最小覆盖子串问题的滑动窗口解法。题目要求在母串s中找到包含目标串t所有字符的最短连续子串。核心思路是:1)使用双指针维护滑动窗口,右指针扩展窗口直至包含所有t字符,左指针收缩窗口寻找最短有效子串;2)用固定长度数组替代哈希表统计字符频次,提高效率;3)通过valid和needCount变量快速判断窗口有效性。该算法时间复杂度O(m+n),空间复杂度O(1),是此类子串匹配问题的经典模板解法。掌握扩窗找有效、缩窗求最优的思路可高效解决同类问题。

27届Java后端炒粉练习生,AICoding中........ 656

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JavaScript实现最小覆盖子串--力扣(leetcode 76题)

目录 1 问题 2 输入输出 3 解答 滑动窗口 4 代码 1 问题 https://leetcode-cn.com/problems/minimum-window-substring/ 给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。 2 输入输出 示例: 输入: S = "ADOBECODEBANC", T = "ABC" 输出: "BANC" 说明: 如果 S 中不存这样的子串,则返回空字符串 ""。 如果 S 中存在这样的子串,

bailizx 717

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

leetcode_ 76 最小覆盖子串

本文介绍了在字符串s中寻找涵盖字符串t所有字符的最小子串的两种解法。第一种使用不定滑动窗口,每次检查窗口是否满足条件,时间复杂度O(n+52m)。第二种优化方法通过记录字符差值来减少判断时间,时间复杂度O(n+m)。两种方法的空间复杂度均为O(52)。文章还提醒注意处理无解情况,并提供了C++实现代码。

bdn_nbd的博客 1193

LeetCode 76 最小覆盖子串

LeetCode 76 最小覆盖子串 最小覆盖子串 题目描述 题目描述:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。 示例: 输入: S = "ADOBECODEBANC", T = "ABC" 输出: "BANC" 说明: 如果 S 中不存这样的子串,则返回空字符串 ""。 如果 S 中存在这样的子串,我们保证它是唯一的答案。 题解 这题属于滑动窗口类型。思路简单来说就是,用start、end控制一个滑动窗口。当滑动窗口中未包含所有T中字符,end右移

newbiee的博客 256

LeetCode 76题「最小覆盖子串」

LeetCode 76题「最小覆盖子串」是一道经典的滑动窗口算法题目,难度为困难。题目要求在给定的字符串s中找到包含字符串t所有字符的最小子串,若不存在则返回空字符串。

weixin_45524582的博客 831

LeetCode - 76. 最小覆盖子串

摘要: 本文详细介绍了力扣76题「最小覆盖子串」的滑动窗口解法。通过预处理阶段建立哈希表记录目标字符的需求量,使用双指针扩展和收缩窗口,确保窗口内包含所有目标字符且出现次数满足要求。关键在于维护valid变量验证当前窗口的有效性,并在收缩时更新最小窗口信息。时间复杂度为O(n),空间复杂度为O(字符集大小)。以示例s="ADOBECODEBANC"和t="ABC"逐步演示窗口移动过程,最终返回最小子串"BANC"。文章还指出常见错误(如未初始化和条

2402_83315537的博客 983

LeetCode 76:最小覆盖子串(困难)

LeetCode 76:最小覆盖子串(困难) 解答 基本的滑动窗口应该不难想到,关键是如何判断s的滑动窗口中包含t的所有字母。 代码一 对s的滑动窗口和字符串t统计字母频率,记录在scnt和tcnt中,对于每个位置i的字母, scnt[i] ≥\ge≥ tcnt[i], 否则s的滑动窗口不能完全包含字符串t。由此得到函数judge class Solution { public: bool judge(int* scnt, int* tcnt, string t){ for(i

weixin_44343319的博客 445

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

/ 4. 当 valid == needTypeCount 时,说明当前窗口已经包含了 t 中所有字符。// 如果移出这个字符后,导致该字符的数量不再满足需求,valid 要 - 1。// 如果该字符在窗口里的数量刚好达到了需求的数量,满足条件的种类数 + 1。// 记录当前窗口中的字符数量。// 如果移出的字符是我们关心的字符,更新窗口数据。// 如果这个字符是 t 中需要的字符,更新窗口数据。

m0_62808636的博客 230
上一篇: Leetcode142. 环形链表 II
下一篇: Leetcode34. 在排序数组中查找元素的第一个和最后一个位置
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值