力扣--76. 最小覆盖子串

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

注意:

  • 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。
  • 如果 s 中存在这样的子串,我们保证它是唯一的答案。

示例 1:

复制代码
输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"
解释:最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。

示例 2:

复制代码
输入:s = "a", t = "a"
输出:"a"
解释:整个字符串 s 是最小覆盖子串。

示例 3:

复制代码
输入: s = "a", t = "aa"
输出: ""
解释: t 中两个字符 'a' 均应包含在 s 的子串中,
因此没有符合条件的子字符串,返回空字符串。

提示:

  • m == s.length
  • n == t.length
  • 1 <= m, n <= 105
  • st 由英文字母组成

此题考虑用滑动窗口来做,套用模板就成~

cpp 复制代码
string minWindow(string s, string t) {
        unordered_map<char,int> window,need;//定义哈希表,存放窗口中的字符串和t中每个字符的个数
        for(char c:t) need[c]++;
        int left=0,right=0,val=0,len=INT_MAX,stat=0;
        while(right<s.size()){
            char c=s[right];
            right++;
            // 扩大窗口操作
            if(need.count(c)){//判断right是否在need当中
                window[c]++;//如果在就把窗口中该字符+1
                if(window[c]==need[c]){//判断窗口中的目标字符个数是否和need中的字符个数相等
                    val++;
                }
            }
            while(val==need.size()){
                // 更新窗口最小长度
                if(right-left<len){
                    stat=left;
                    len=right-left;
                }
                // 缩小窗口操作
                char d=s[left];
                left++;
                if(need.count(d)){
                    if(window[d]==need[d]){
                        val--;
                    }
                     window[d]--;
                    
                }
            }
        }
        return len==INT_MAX?"":s.substr(stat,len);
    }

提交通过~

相关推荐
承渊政道2 分钟前
动态内存管理
c语言·c++·经验分享·c#·visual studio
孤独得猿18 分钟前
聊天室项目开发——etcd的安装和使用
linux·服务器·c++·etcd
伏小白白白25 分钟前
【论文精度-2】求解车辆路径问题的神经组合优化算法:综合展望(Yubin Xiao,2025)
人工智能·算法·机器学习
new coder27 分钟前
[c++语法学习]Day10:c++引用
开发语言·c++·学习
无敌最俊朗@1 小时前
数组-力扣hot56-合并区间
数据结构·算法·leetcode
囚生CY1 小时前
【速写】优化的深度与广度(Adam & Moun)
人工智能·python·算法
哼?~2 小时前
C++11标准 上 (万字解析)
开发语言·c++
码农多耕地呗2 小时前
力扣94.二叉树的中序遍历(递归and迭代法)(java)
数据结构·算法·leetcode
给大佬递杯卡布奇诺2 小时前
FFmpeg 基本API avformat_alloc_context 函数内部调用流程分析
c++·ffmpeg·音视频
微笑尅乐2 小时前
BFS 与 DFS——力扣102.二叉树的层序遍历
leetcode·深度优先·宽度优先