码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • leetCode 76. 最小覆盖子串 + 滑动窗口 + 哈希Hash


    我的往期文章:此题的其他解法,感兴趣的话可以移步看一下:

    leetCode 76. 最小覆盖子串 + 滑动窗口 + 图解(详细)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_41987016/article/details/134042115?spm=1001.2014.3001.5501
    力扣题: 76. 最小覆盖子串 - 力扣(LeetCode)

    文字取自 笨猪爆破组 ,著作权属于该作者,本文只是整理成截图,方便浏览,如有不适,我将删除

    关于 滑动窗口的相关知识点和此题的解题思路,可以看来自笨猪爆破组的这篇文章:76. 最小覆盖子串 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/minimum-window-substring/solutions/257928/yi-bu-bu-xing-cheng-hua-dong-chuang-kou-si-lu-shen/

    本文就是参考该作者的解题思路做的 C++版本!Thanks♪(・ω・)ノ

    C++ 代码: 

    1. class Solution {
    2. public:
    3. string minWindow(string s, string t) {
    4. unordered_map<char,int>need;
    5. int strStart=s.size(),windowLen=s.size()+1,missingType=0;
    6. int left=0,right=0; // 左右指针
    7. for(const char c:t) { // t为aabc的话,need 为{a:2,b:1,c:1}
    8. if (!need[c]) {
    9. missingType++; // 需要找齐的种类数 +1
    10. need[c]++;
    11. }else need[c]++;
    12. }
    13. while(right < s.size()) { // 主旋律扩张窗口,超出s串就结束
    14. char rightChar = s[right];
    15. if(need.find(rightChar)!=need.end()) {
    16. need[rightChar]--; // 是目标字符,它的缺失个数-1
    17. if(need[rightChar] == 0) missingType--; // 它的缺失个数更新后为0,缺失的种类数就-1
    18. }
    19. while(missingType == 0) { // 当前窗口包含所有字符的前提下,尽量收缩窗口
    20. // 更新窗口的长度和起始位置
    21. int curWindowLen = right-left+1;
    22. if(curWindowLen < windowLen) {
    23. windowLen = curWindowLen; // 更新窗口的长度
    24. strStart=left; // 更新窗口的起始位置
    25. }
    26. // 继续缩小窗口
    27. char leftChar = s[left]; // 左指针要右移,左指针指向的字符要被丢弃
    28. if(need.find(leftChar)!=need.end()) {
    29. need[leftChar]++; // 被舍弃的是目标字符,缺失个数+1
    30. if(need[leftChar]>0) missingType++; // 如果缺失个数更新后>0,缺失的种类+1
    31. }
    32. left++; // 左指针要右移,收缩窗口
    33. }
    34. right++;
    35. }
    36. if (strStart == s.size()) return "";
    37. return s.substr(strStart, windowLen); // 根据起点和windowLen截取子串
    38. }
    39. };

    推荐和参考文章:

    76. 最小覆盖子串 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/minimum-window-substring/solutions/257928/yi-bu-bu-xing-cheng-hua-dong-chuang-kou-si-lu-shen/

  • 相关阅读:
    线程安全,与多线程的应用
    Mybatis中Resources和ClassLoaderWrapper
    python-爬虫-urllib3
    JVM从零到一系列:01--JVM概述【初识JVM】
    Mysql存储过程与存储函数
    数字藏品NFT“无聊猿”BAYC的内忧与外患
    分布式架构的高性能与可用性
    CSP初赛知识精讲--排列组合
    笔试强训2
    TSINGSEE青犀煤矿矿井视频监控与汇聚融合管理视频监管平台建设方案
  • 原文地址:https://blog.csdn.net/weixin_41987016/article/details/134088989
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号