leetCode 76. 最小覆盖子串 + 滑动窗口

news/2024/5/20 10:27:03 标签: leetcode, 最小覆盖子串, 滑动窗口

76. 最小覆盖子串 - 力扣(LeetCode)


给你一个字符串 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 的子串中,因此没有符合条件的子字符串,返回空字符串

从左->到下->到右->到下看以下图 

 

 

class Solution {
public:
    string minWindow(string s, string t) {
        unordered_map<char,int> need;
        unordered_map<char,int> window;
        // if (s.size() < t.size()) return "";
        for(auto c:t) {
            need[c]+=1;
        }
        int right=0,left=0;
        int valid=0;
        int start=0,minLen=INT_MAX;
        while(right < s.size()) {
            char cur = s[right];
            right++;
            // 进行窗口数据一系列更新
            if(need.find(cur)!=need.end()) {
                window[cur]++;
                if(window[cur] == need[cur]) valid++;
            }
            while(need.size() == valid) {
                if(right - left < minLen) {
                    start = left;
                    minLen = right - left;
                }
                // d 是将移除窗口的字符串
                char deleteChar = s[left];
                // 左边移动窗口
                left++;
                // 进行窗口内数据当一系列更新
                if(window.find(deleteChar)!=window.end()) {
                    if(window[deleteChar] == need[deleteChar]) valid--;
                    window[deleteChar]--;
                }
            }
        }
        return minLen == INT_MAX ? "" : s.substr(start,minLen);
    }
};

推荐文章:76. 最小覆盖子串 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/minimum-window-substring/solutions/736507/shu-ju-jie-gou-he-suan-fa-hua-dong-chuan-p6ip/


http://www.niftyadmin.cn/n/5125809.html

相关文章

负载均衡策略 LVS

一、集群功能分类 1、LB (1) 概念&#xff1a; LB&#xff1a;负载均衡 (Load Balancing) 是一种分发网络流量的技术&#xff0c;LB 负载均衡的基本原理是将传入的网络流量分发到多个后端服务器&#xff0c;以确保这些服务器都承担相似的工作负载&#xff0c;从而避免某一台…

【MySQL索引与优化篇】InnoDB数据存储结构

文章目录 1. 数据库的存储结构:页1.1 磁盘与内存交互基本单位:页1.2 页结构概述1.3 页的上层结构 2. 页的内部结构3. InnoDB行格式(或记录格式)3.1 Compact行格式3.2 Dynamic和Compressed行格式3.3 Redundant行格式 4. 区、段与碎片区4.1 为什么要有区&#xff1f;4.2 为什么要…

CentOS 编译安装 nginx

CentOS 编译安装 nginx 修改 yum 源地址为 阿里云 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repoyum makecache升级内核和软件 yum -y update安装常用软件和依赖 yum -y install gcc gcc-c make cmake zlib zlib-devel openss…

Java注解及自定义注解

注解/元数据&#xff08;Annotation&#xff09;&#xff0c;是对代码级别的说明&#xff1b;在JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。可以声明在包、类、字段、方法、局部变量、方法参数等的前面&#xff0c;用来对这些元素进行说明、注…

网络安全将会是IT行业中比较容易就业的方面

当前&#xff0c;网络空间安全面临的形势复杂多变&#xff0c;对抗趋势越发凸显。以窃取敏感数据、破坏关键信息技术设施为目标的有组织网络攻击愈演愈烈&#xff0c;零日漏洞、供应链攻击、数据泄露等重大安全事件层出不穷。 回望2022年&#xff0c;国内&#xff0c;以西北工业…

万能鼠标设置 SteerMouse v5.6.8

鼠标可谓是用户们在使用电脑时候的必备外接设备呢&#xff01;适合你自己的鼠标设置也绝对能够优化你的Mac使用体验&#xff01;想要更好的Mac体验就试试用Steermouse Mac版吧。它通过软件来自由设置你的鼠标操作&#xff01;在这款万能鼠标设置工具中&#xff0c;用户可以在偏…

使用 Python 创建自动点击器

顾名思义,Python 中的自动点击器是一个简单的 Python 应用程序,它根据用户要求重复单击鼠标。 不同的参数,如速度、频率和位置,可以根据用户进行更改。 Python 有不同的模块可用于控制键盘、鼠标等设备。因此,我们可以使用这些模块轻松地在 Python 中创建自动点击器。 本…

荣耀推送服务消息分类标准

前言 为了提升终端用户的推送体验、营造良好可持续的通知生态&#xff0c;荣耀推送服务将对推送消息进行分类管理。 消息分类 定义 荣耀推送服务将根据应用类型、消息内容和消息发送场景&#xff0c;将推送消息分成服务通讯和资讯营销两大类别。 服务通讯类&#xff0c;包…