当前位置: 首页 > article >正文

力扣 76. 最小覆盖子串

🔗 https://leetcode.cn/problems/minimum-window-substring

题目

  • 给定字符串 s 和 t,返回最短的 s 的子串,包含了所有 t 的字符,不存在则返回空
  • 题目保证若存在这样的子串,答案唯一

思路

  • 记录 t 的字母及频次
  • 滑动窗口 right 直到覆盖到所有的 t 字符,再收缩 left,找到符合要求子串,记录其中最短的
  • 因为 s 的子串可以包含多个 t 的字符,所以设置了 remain,即需要继续找寻的 t 的字母数,并持续记录 t 的字母及频次

代码

class Solution {
public:
    string minWindow(string s, string t) {
        unordered_map<char, int> hash_t;
        for (auto& ch : t) {
            hash_t[ch]++;
        }

        int l = 0;
        int remain = hash_t.size();
        string ans;
        for (int r = 0; r < s.size(); r++) {
            if (hash_t.find(s[r]) != hash_t.end()) {
                hash_t[s[r]]--;
                if (hash_t[s[r]] == 0) remain--;
            } 
            if (remain == 0) {
                while (l < s.size() && 
                    (hash_t.find(s[l]) == hash_t.end() || 
                     hash_t[s[l]] + 1 <= 0)) {
                        if (hash_t.find(s[l]) != hash_t.end()) hash_t[s[l]]++;
                        l++;
                     }
                     if (ans.empty()) ans = s.substr(l, r-l+1);
                     else if (r - l + 1 < ans.size()) ans = s.substr(l, r-l+1);
            }
        }
        return ans;
    }
};

http://www.kler.cn/a/406904.html

相关文章:

  • EWA Volume Splatting
  • Vue中Select选择器el-option实现动态多选
  • MFC线程-AfxBeginThread使用方法
  • 全面解析 java.lang.ClassCastException 异常
  • 怎么只提取视频中的声音?从视频中提取纯音频技巧
  • uniapp发布android上架应用商店权限
  • Java项目部署的三个阶段:java -jar、Docker和Kubernetes
  • 【H2O2|全栈】JS进阶知识(六)ES6(2)
  • HAL库的简单介绍以及环境搭建
  • 《生成式 AI》课程 作业6 大语言模型(LLM)的训练微调 Fine Tuning -- part2
  • 【环境配置】ubuntu下的保持程序一直运行
  • 【工具变量】上市公司企业信贷可得性数据(2000-2022年)
  • Unity图形学之CubeMap立方体贴图
  • 装饰器模式 (Decorator Pattern)
  • 设计模式-创建型-单例模式
  • ssm面向品牌会员的在线商城小程序
  • 【SQL Server】华中农业大学空间数据库实验报告 实验四 完整性约束
  • IDEA2024 maven构建跳过测试
  • 【跳线帽】是什么?怎么用?
  • AIVA 技术浅析(五):使用的自然语言处理(NLP)技术浅析
  • mac homebrew国内镜像源安装
  • SpringBoot社团管理:数据驱动的解决方案
  • uniapp、js判断输入的内容是整数
  • 动态规划子数组系列一>最长湍流子数组
  • 旋转向量v和旋转矩阵R
  • 抓包 127.0.0.1 (loopback) 使用 tcpdump+wireshark