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

LeetCode 76. 最小覆盖子串

时间:2023-05-11 15:15:30浏览次数:35  
标签:子串 字符 cnt 窗口 string 76 window LeetCode

思路

暴力就是枚举终点 i,找出里 i 最近的起点 j,再去更新答案,可以发现起点随终点单调往后,因此可以滑动窗口优化

如何快速判断当前窗口是否包含子串所有字符

  • 哈希表 word 存储子串所有字符出现的次数,window 存储当前窗口所有字符出现的次数
  • 变量 cnt 记录当前窗口里,有效字符的个数
  • cnt 等于所有字符的出现次数时,表明已经包含子串, 尝试更新答案

维护变量 cnt

假设新增的字符为 c

  • 如果 window[c]<word[c],cnt++;否则 cnt 不变,因为该字符已经冗余

代码

class Solution {
public:
    unordered_map<char,int> hashatble,window;
    string minWindow(string s, string t) {
        for(auto i:t)   hashatble[i]++;
        string res;
        for(int i=0,j=0,cnt=0;i<s.size();i++)
        {
            //维护窗口
            window[s[i]]++;//右边界右移
            if(window[s[i]]<=hashatble[s[i]]) cnt++;//更新cnt
            while(window[s[j]]>hashatble[s[j]])//如果左边界是冗余的
            {
                window[s[j]]--;
                j++;
            }
            //如果当前窗口包含了子串,则更新答案
            if(cnt==t.size())
                if(!res.size()||i-j+1<res.size())
                res=s.substr(j,i-j+1);
        }
        return res;
    }
};

标签:子串,字符,cnt,窗口,string,76,window,LeetCode
From: https://www.cnblogs.com/tangxibomb/p/17391063.html

相关文章

  • LeetCode/二维网格图中探测环
    给你一个二维字符网格数组grid,大小为mxn,你需要检查grid中是否存在相同值形成的环。一个环是一条开始和结束于同一个格子的长度大于等于4的路径。对于一个给定的格子你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有相同的值1.深度......
  • DFIG双馈异步式风力发电系统的并网发电与低电压穿越(LVRT)控制算法的仿真模型,基于Crowba
    DFIG双馈异步式风力发电系统的并网发电与低电压穿越(LVRT)控制算法的仿真模型,基于Crowbar电路(转子串电阻)和Chopper电路:1.正常并网发电时的网侧变流器与机侧变流器的控制算法仿真,网侧为四象限整流,电压外环电流内环双闭环,基于SOGI二阶广义积分器进行锁相,可实现电网电压严重畸变、不平......
  • 子串能表示从 1 到 N 数字的二进制串
    给定一个二进制字符串s和一个正整数n,如果对于[1,n]范围内的每个整数,其二进制表示都是s的子字符串,就返回true,否则返回false。子字符串是字符串中连续的字符序列。示例1:输入:s="0110",n=3输出:true示例2:输入:s="0110",n=4输出:false提示:1<=s.le......
  • P1676 [USACO05FEB] Aggressive cows G 题解
    题目传送门解题思路最大值最小化问题,考虑二分答案。首先要排序,保证序列单调不降,然后求出两个隔间之间的距离。sort(a+1,a+1+n);for(rii=1;i<=n;i++) dis[i]=a[i+1]-a[i];二分出一个\(mid\),判断它是否合法:每次累加距离,如果距离和比\(mid\)大,说明当前可以分配牛,记录数量......
  • LeetCode 459. 重复的子字符串
    题目链接:LeetCode459.重复的子字符串题意:给定一个非空的字符串s,检查是否可以通过由它的一个子串重复多次构成。解题思路:本题就是kmp算法的经典应用,n-next[n]是原字符串的最小周期完整代码如下:funcrepeatedSubstringPattern(sstring)bool{//kmp的经典应用:求......
  • LeetCode 151. 反转字符串中的单词
    题目链接:LeetCode151.反转字符串中的单词题意:给你一个字符串s,请你反转字符串中单词的顺序。解题思路:如果我们将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。所以解题思路如下:移除多余空格将整个字......
  • ADV7611BSWZ-ASEMI代理亚德诺ADV7611BSWZ原厂芯片
    编辑-ZADV7611BSWZ参数描述:型号:ADV7611BSWZ输入高电压:1.2V输入低电压:0.4V输入电流:±45µA输入电容:10pF输出高电压:2.4V输出低电压:0.4V高阻抗泄漏电流:±35µA输出电容:20pFLLC频率范围:13.5-165MHzSCL频率:400kHz储存温度范围:-60℃to+150℃  一般说明:ADV7611B......
  • LeetCode 541. 反转字符串 II
    题目链接:LeetCode541.反转字符串II题意:给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。如果剩余字符少于k个,则将剩余字符全部反转。如果剩余字符小于2k但大于或等于k个,则反转前k个字符,其余字符保持原样。......
  • LeetCode 剑指 Offer 05. 替换空格
    题目链接:LeetCode剑指Offer05.替换空格题意:输入一个字符串s,然后将s中的每个空格替换成"%20"。解题思路:直接遍历一遍字符串,如果当前字符不是空格,则加入到结果中如果是空格,则将“%20”加入到结果集完整代码如下:funcreplaceSpace(sstring)string{varres......
  • LeetCode 344. 反转字符串
    题目链接:LeetCode344.反转字符串题意:输入一个字符串,将其在原地进行反转。解题思路:对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。完整代码如下:funcreverseString(s[]byte){//原地反转字符......