LeetCode 76. 最小覆盖子串

给定两个字符串 st,长度分别是 mn,返回 s 中的 最短窗口 子串 ,使得该子串包含 t 中的每一个字符(包括重复字符 )。如果没有这样的子串,返回空字符串""

测试用例保证答案唯一。

示例 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 复制代码
class Solution {
    bool is_covered(int cnt_s[],int cnt_t[])
    {
        for(int i='a';i<='z';i++)
        {
            if(cnt_s[i]<cnt_t[i])
            return false;
        }
        for(int i='A';i<='Z';i++)
        {
            if(cnt_s[i]<cnt_t[i])
            return false;
        }
        return true;
    }
public:
    string minWindow(string s, string t) {
        int cnt_s[128]{};
        int cnt_t[128]{};
        for(auto c:t)
        {
            cnt_t[c]++;
        }
        int m=s.size();
        int ansLeft=-1,ansRight=m;
        int left=0;
        for(int right=0;right<m;right++)
        {
            cnt_s[s[right]]++;
            while(is_covered(cnt_s,cnt_t))
            {
                if(right-left<ansRight-ansLeft)
                {
                    ansLeft=left;
                    ansRight=right;
                }
                cnt_s[s[left]]--;
                left++;
            }
        }
        return ansLeft<0?"":s.substr(ansLeft,ansRight-ansLeft+1);
    }
};
相关推荐
xywww1683 小时前
大模型 API 选型实战:GPT、Gemini、Claude 接入时该看哪些指标?
运维·服务器·人工智能·python·gpt·langchain
梦想的颜色6 小时前
【Docker原理】Docker 容器一文打尽:生命周期、环境管控、迁移备份、日志进程排查、垃圾清理
运维·docker·容器·容器生命周期·容器日志排查·容器迁移备份·容器进程管理
欢呼的太阳7 小时前
数据库设计Step by Step (10)——范式化
服务器·数据库·oracle
夜雪一千8 小时前
Python enumerate() 函数完整详解:遍历同时获取索引,告别手动计数
服务器·windows·python
donoot9 小时前
Linux系统下图书馆级电子书全自动标准化分类整理完整实施方案
大数据·linux·运维·电子书管理
ITKEY_9 小时前
macOS brew 安装的nginx 文件在哪里?
运维·nginx·macos
Elastic 中国社区官方博客9 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
大E帝国子民110 小时前
MacOS 安装Seismic Unix
服务器·macos·unix
Tim_Van10 小时前
在 CentOS 7 中安装 Chromium 的完整步骤
linux·运维·chrome·centos
德福危险11 小时前
富有想象力的XSS盲打:靶机练习之Tempus_fugit5
服务器·网络·xss