首页 > 其他分享 >76. 最小覆盖子串

76. 最小覆盖子串

时间:2024-12-24 11:09:56浏览次数:4  
标签:子串 count ch 最小 len char 76 ans need

  1. 题目链接

  2. 解题思路:以i开头,最小覆盖子串是什么,然后求出所有的结果,最小的便是。先求出i的结果,是[i, j],然后求i+1时,直接从j后遍历即可。

    • 窗口的思想,窗口在[i, j],然后来到i+1,先把i弹出去,弹出去的前提是,s[i]是我们需要的字符。然后再看[i + 1, j]是否满足,如果不满足,右边界再继续扩。
  3. 代码

    class Solution:
        def minWindow(self, s: str, t: str) -> str:
            ans_begin = -1
            ans_end = -1
            ans_len = 1e+10
            char_count = {}    # 需要的字符
            need = 0
            for ch in t:
                if ch in char_count:
                    char_count[ch] += 1
                else:
                    char_count[ch] = 1
                    need += 1
            j = 0
            for i in range(0, len(s), 1):
                # 先把i - 1弹出去
                if i > 0 and s[i - 1] in char_count: 
                    char_count[s[i - 1]] += 1
                    if char_count[s[i - 1]] == 1 :
                        need += 1
                while j < len(s) and need > 0:
                    if s[j] in char_count:
                        char_count[s[j]] -=1
                        if char_count[s[j]] == 0:
                            need -=1
                    j += 1
                # [i, j) 满足了条件
                if need == 0 and j - i < ans_len:
                    ans_len = j - i
                    ans_begin = i
                    ans_end = j - 1
            return s[ans_begin : ans_end + 1]
    
    

标签:子串,count,ch,最小,len,char,76,ans,need
From: https://www.cnblogs.com/ouyangxx/p/18626923

相关文章

  • 最小覆盖子串
      滑动窗口算法的思路是这样:1、我们在字符串S中使用双指针中的左右指针技巧,初始化left=right=0,把索引左闭右开区间[left,right)称为一个「窗口」。2、我们先不断地增加right指针扩大窗口[left,right),直到窗口中的字符串符合要求(包含了T中的所有字符)......
  • 【字符串】-Lc5-最长回文子串(中心扩展法)
    写在前面  最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。目录写在前面一、场景描述二、具体步骤1.环境说明2.代码写在后面一、场景描述  最长回文子串。给你一个字符串s,找到s中最长的回文子串。定义:如果字符串的反......
  • 302 最小循环覆盖
    //302最小循环覆盖.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/909给你一个字符串a,你需要求出这个字符串的最小循环覆盖的长度。b是a的最小循环覆盖,当且仅当a是通过b复制多次并连接后得到的字符......
  • 最小生成树相关技术
    注意只有连通图才有生成树,图不连通就只有生成森林。最小生成树的板子Kruskal基本思想是按边权从小到大加边,是贪心思想。时间复杂度\(O(m\logm)\)。板子sort(e+1,e+tot+1,cmp);for(inti=1;i<=tot;++i){ intu=e[i].u,v=e[i].v; u=find(u),v=find(v); if(u==v)continu......
  • 写一个方法找出两个数的最小公倍数
    在前端开发中,你可以使用JavaScript来写一个方法找出两个数的最小公倍数(LeastCommonMultiple,LCM)。最小公倍数可以通过两数的乘积除以它们的最大公约数(GreatestCommonDivisor,GCD)来得到。以下是一个简单的JavaScript函数,用于计算两个数的最小公倍数:functiongcd(a,b){......
  • 【编译原理】编译原理知识点汇总·词法分析器(正则式到NFA、NFA到DFA、DFA最小化)
    ......
  • springboot个人健康信息管理小程序-计算机设计毕业源码07695
    摘要在当今这个数字化、信息化的时代,个人健康管理已成为人们生活中不可或缺的一部分。随着生活节奏的加快,越来越多的人开始关注自己的身体状况,希望能够及时了解并调整自己的生活习惯,以达到最佳的健康状态。为此,我们开发了一款基于SpringBoot的个人健康信息管理小程序,旨在为......
  • Averaging Weights Leads to Wider Optima and Better Generalization(SWA2018-2019)平
    第一部分:解决的问题论文解决的是深度神经网络优化过程中模型的泛化能力提升问题。具体来说:背景问题:在深度学习中,SGD(随机梯度下降)及其变种是主要的优化方法,但其找到的解通常在权重空间中是“尖锐(参数稍微变一点损失函数就会变化很大)的”(sharpminima),对模型泛化性能有负面影......
  • 深度学习之平坦最小化
    第一部分:基础定义平坦最小化(PlateauMinimization)通常出现在数学优化、图像处理和信号处理领域,指的是一种优化方法或目标,其目的是找到在某些意义下“平坦”的解,同时对目标函数或某些能量函数进行最小化。平坦最小化的核心思想是:不仅仅关注优化问题的极值,还特别关注优化解在某......
  • 【EPS32硬件】ESP32最小系统绘制
    以ESP32-WROOM-32E原理图为例模组原理图外围设计原理图●EPAD管脚39可以不焊接到底板。如果您想将EPAD焊接到底板,请确保使用适量焊膏,避免过量焊膏造成模组与底板距离过大,影响管脚与底板之间的贴合。●为确保ESP32芯片上电时的供电正常,EN管脚处需要增加RC延迟......