算法练习:76. 最小覆盖子串

题目链接:76. 最小覆盖子串

算法实现,利用双指针,滑动窗口进行解决,

利用两个哈希表进行解决,讲字符串t全部放入一个哈希表中,

然后利用滑动窗口对字符串s进行插入删除操作,

利用一个变量count来记录有效字符

直接看代码注释:

cpp 复制代码
class Solution {
public:
    string minWindow(string s, string t) {
        map<char, int> h1;
        for (auto e : t) h1[e]++;

        map<char, int> h2;
        int retleft = 0;
        int ret = INT_MAX;
        for (int left = 0, right = 0, count = 0; right < s.size(); right++)
        {
            //如果有效字符数和t.size()不相同,就一直进窗口,直到相同
            h2[s[right]]++;
            if (h2[s[right]] <= h1[s[right]]) count++;
            //判断,如果有效字符数和t.size()相同,就进循环判断
            while (count == t.size())
            {
                //如果此时位置处在有效字符上,就直接进行判断范围是否为较小范围
                //因为此时有效字符相同,且left位置刚好是有效字符,那么此时[left,right]一定有效
                if (h1.count(s[left]))
                {
                    if (right - left + 1 < ret)
                    {
                        //记录最小范围 
                        retleft = left;
                        ret = min(ret, right - left + 1);
                    }
                }
                //移动left,缩小区间 ,继续寻找更小范围
                if (h2[s[left]] <= h1[s[left]]) count--;
                h2[s[left]]--;
                left++;
            }
        }
        if(ret == INT_MAX) return "";//如果此时ret == INT_MAX,那么此时一定没找到,返回空
        return s.substr(retleft,ret);//直接利用substr获取出最小范围的字符串
    }
};
相关推荐
漂流瓶jz38 分钟前
UVA-1613 K度图的着色 题解答案代码 算法竞赛入门经典第二版
算法·深度优先·图论·贪心·aoapc·算法竞赛入门经典·uva
Pniubi1 小时前
动态规划入门 ( - 力扣509斐波那契数)
算法·动态规划
吴长建先生重名了2 小时前
GitHub Actions部署报表系统踩坑记:幂等性与限
算法
贝壳6903 小时前
一个2026年2月才上传的库,凭什么敢碰2009年就有人写烂的题目
算法
贝壳6903 小时前
同一道三亿位选型题,三个AI给了我三个答案,我把它们拉进同一台机器复跑
算法
汉克老师5 小时前
《从C++小白到算法高手:GESP 1—8级成长地图》第一讲:认识GESP——从编程新手到算法探索者
c++·gesp·信息学竞赛·小学生学c++
晴天的雨.9926 小时前
【C++】继承篇
java·开发语言·c++
青少儿编程课堂6 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
another heaven6 小时前
【C/C++ 第一次跨越(上):用 C++11/14 停止制造新的旧代码】
c语言·c++·制造
qq_406981036 小时前
c++ lamda(三)Lambda表达式
java·前端·c++