Leetcode 76. 最小覆盖子串

Leetcode-76:最小覆盖子串(困难题) 滑动窗口法超详细解析 题目链接 https://leetcode-cn.com/problems/minimum-window-substring/ 题目 给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""。 注意: 对于t中重复字符,我们寻找的子字符串中该字符数量必须不少于t中该字符数量。 如果s中存在这样的子串,我们保证它是唯一的答案。 示例 示例 1: 输入:s = "ADOBECODEBANC... 阅读详情

题目

给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。

示例:

输入: S = “ADOBECODEBANC”, T = “ABC”
输出: “BANC”

说明:

  • 如果 S 中不存这样的子串,则返回空字符串 “”。
  • 如果 S 中存在这样的子串,我们保证它是唯一的答案。

解答

使用滑动窗口算法思想。

滑动窗口问题通用模板如下(本文章的重点内容!)
int left = 0, right = 0;

while (right < s.size()) {
    window.add(s[right]);
    right++;
    
    while (valid) {
        window.remove(s[left]);
        left++;
    }
}

本题步骤如下:

  1. 先将 t 字符串的所有字符存入哈希表。
  2. 声明 lt, gt 两个指针作为滑动窗口 [lt, gt - 1] 的边界
  3. 此时如果窗口还不能匹配 t 的窗口, 让窗口扩大,gt ++ 。
  4. 若能匹配 t 的窗口, 统计最小子串,然后使窗口缩小,不断地让左边界 lt ++ ,直到不再覆盖 t 字串。

tips:本题优化成 int[128] 代替 哈希表 效率会很高,但不太通用,我认为此优化学习不到啥,所以我没做。

复杂度:O(S + T) 时间,O(S + T) 空间。

本题代码
class Solution {
    public String minWindow(String s, String t) {
        char[] ts = t.toCharArray();
        Map<Character, Integer> needs = new HashMap<>();
        for(char ch : ts) needs.put(ch, needs.getOrDefault(ch, 0) + 1);
        
        Map<Character, Integer> window = new HashMap<>();
        int lt = 0; int gt = 0;
        int start = 0; int end = s.length() + 1;
        int match = 0;
        while(gt < s.length()) {
            char c1 = s.charAt(gt);
            if(needs.containsKey(c1)) {
                window.put(c1, window.getOrDefault(c1, 0) + 1);
                if(window.get(c1).equals(needs.get(c1))) match ++;
            }
            
            gt ++;
            
            while(match == needs.size()) {
                if(gt - lt < end - start) {
                    start = lt;
                    end = gt;
                }
                
                char c2 = s.charAt(lt);
                if(needs.containsKey(c2)) {
                    window.put(c2, window.get(c2) - 1);
                    if(window.get(c2) < needs.get(c2)) match --;
                }
                
                lt ++;
            }
        }
            
        return end == s.length() + 1 ? "" : s.substring(start, end);
    }
}
结果

在这里插入图片描述

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

相关推荐

LeetCode 76. 最小覆盖子串 | Python

使用滑动窗口的思想,解决《76. 最小覆盖子串》问题

"大梦三千秋的博客 1479

LeetCode第76题----最小覆盖字串

本题是LeetCode第76题,官方定义的难度系数为Hard,但是题目很有意思,这是我第一次遇到我自己的暴力解法和官方的优秀解法相差不大的题目。

F & F的博客 1814

Leetcode76 最小覆盖子串题解

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

算法笨蛋 703

Leetcode(76)——最小覆盖子串

76. 最小覆盖子串

KCDCY的博客 2750

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

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

ylumwd的博客 913

leetcode答案-76_Min_substring:76_Min_substring

leetcode 答案 76_Min_substring 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。   示例 1: 输入:s = "ADOBECODEBANC", t = "ABC" 输出:"BANC" 示例 2: 输入:s = "a", t = "a" 输出:"a" 示例 3: 输入:"acbbaca" 输出:"aba" 提示: 1 <= s.length, t.length <= 105 s 和 t 由英文字母组成 来源:力扣(LeetCode) 链接:

leetCode 76. 最小覆盖子串 + 滑动窗口 + Hash + 图解(详细)

给你一个s、一个t。返回 s中涵盖t所有字符的最小子串。如果 s中不存在涵盖 t所有字符的子串,则返回""tts"BANC"最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'"a"整个字符串 s 是最小覆盖子串""t 中两个字符 'a' 均应包含在 s 的子串中,因此没有符合条件的子字符串,返回空字符串。

呵呵哒!的博客 1878

网络基础(二):数制转换与分类编址的IPv4地址

本文介绍数制转换、IP地址、分类编址的IPv4地址,希望对你有帮助!

十七拾的博客 1052

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

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

Cnc2014的博客 565

【NAS for PVE _04】安装TrueNAS

前篇说到如何调试 Proxmox VE 8.2 为安装虚拟机做准备,本篇主要讲述如何在 Proxmox VE 上安装 TrueNAS 系统,并开启NFS供其他系统挂载使用官网下载好TrueNAS系统镜像。

村口王师傅。 6143

STM32-DAC定时器触发三角波生成【频率与幅度精准控制】

本文详细介绍了STM32 DAC定时器触发三角波生成的原理与实现方法,涵盖硬件配置、频率与幅度精准控制技巧及代码实现。通过定时器触发DAC模块,可灵活调节三角波的频率和幅度,适用于信号发生器等高精度应用场景。

weixin_29161785的博客 452

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

基于Android Studio的校园智能点餐系统开发实战(附完整源码与部署指南)

本文详细介绍了基于Android Studio开发校园智能点餐系统的完整流程,包括需求分析、环境搭建、数据库设计、客户端与后台功能实现。系统采用SSM框架和MySQL数据库,解决了校园食堂高峰期排队问题,提供高效的点餐体验。附完整源码与部署指南,助力开发者快速构建类似应用。

weixin_29015801的博客 558

力扣(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

OpenCompass实战:从零部署大模型评测平台,量化模型能力选型

在大模型技术选型与评估中,客观、可量化的评测体系是工程实践的关键。其核心原理在于通过标准化的数据集、统一的评测方法与自动化流程,将主观的模型体验转化为可比较的指标数据。这种评测框架的技术价值在于解决了模型能力评估的模糊性问题,为开发者提供了模型选型、效果对比与迭代优化的科学依据。典型的应用场景包括对比不同开源模型在代码生成、逻辑推理等特定任务上的性能,或是评估微调后模型在业务数据集上的提升效果。OpenCompass作为开源的大模型全能力评测平台,正是这一理念的工程化实现。它通过模块化的四层流水线架构和配置

weixin_28725037的博客 626

Qt入门教程100篇(已完结)

Qt5入门教程,Qt6入门教程。包含了: Qt环境搭建篇、Qt数据类型篇、Qt中STL篇、Qt核心篇、Qt核心对象QObject篇、Qt基础控件篇、Qt对话框篇、Qt高级控件篇、Qt数据模型篇、QSS篇、Qt文件篇 、Qt硬件编程、Qt的一些demo、Qt项目开发篇。......

小鱼酱的博客 15万+

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的博客 188

动量因子在A股市场的有效性分析:量化实证研究

验证动量因子在A股市场的有效性及时间周期性分析不同时间窗口(短期/中期/长期)对动量效应的影响量化交易成本、市场流动性对动量策略收益的侵蚀程度比较A股与成熟市场(如美股)动量效应的差异特征理论框架:行为金融学解释动量效应的产生机制技术实现:Python全流程代码实现动量因子计算与回测实证分析:统计检验、风险收益指标、敏感性分析应用拓展:结合市场微观结构的策略优化方案动量因子(Momentum Factor)

2501_92132293的博客 2471

力扣76.最小覆盖子串

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

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

Spring AI 实战:第二章、Spring AI提示词之玩转AI占卜的艺术

引言:程序员的神秘学探索引言:程序员的神秘学探索“下个迭代能按时发布吗?“这次晋升机会有多大?“我写的代码为什么总在半夜出bug?作为一名开发者是否也曾被这些略带玄学问题困扰?那让我们用Spring AI和提示词工程打造一个专属于程序员的"赛博占卜师",让大师来为你占卜一卦吧~一、提示词工程 - 与AI对话的艺术1.1 提示词工程是什么类比一下,AI就像一位刚从名校毕业的高材生它知识渊博但缺乏经验能解决复杂问题但需要明确指引有时会"过度脑补"(专业术语叫"幻觉")

liaokailin的专栏 1849

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode 76:最小覆盖子串

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

m0_75126572的博客 1379

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

q1111111da的博客 2160

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

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

yyh520025的博客 1273

【力扣76】最小覆盖子串

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

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

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

LeetCode 76 最小覆盖子串

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

newbiee的博客 256
上一篇: Leetcode 71. 简化路径
下一篇: Leetcode 91. 解码方法
一纸浮萍
博客等级 码龄9年 11粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值