【力扣hot100:76. 最小覆盖子串】

题目链接:76. 最小覆盖子串

思路

这道题的目的是找s中最短窗口的子串,这个子串要包含t中的所有字符,这个题可以使用滑动窗口来做。

题的难点在于:如何判断当前s的窗口,是否包含t中所有字符

解决方式 :题目说明了st 由英文字母组成,所以我们可以创建cnt数组统计字符个数,然后可以用枚举的方式来做判断。具体方式见下面的isCovered方法

代码

java 复制代码
class Solution {
  public String minWindow(String S, String t) {
    /**
		 * 找s中包含t的最短窗口
		 * 拆开:1.判断是否包含 2.是否最短
		 */
    //创建统计s跟t的个数的数组
    int [] cntS = new int[128];
    int [] cntT = new int[128];
    //统计t的所有字母以及个数
    for(char c : t.toCharArray()) {
      cntT[c]++;
    }

    char [] s = S.toCharArray();
    int m = s.length;
    //滑动窗口,枚举left	
    int ansLeft = -1;
    int ansRight = m;
    int left = 0;
    for(int right = 0; right < m; right++) {
      cntS[s[right]]++;
      while(isCovered(cntS,cntT)) {
        //查看当前的窗口是否更小
        if(right - left < ansRight - ansLeft) {
          ansRight = right;
          ansLeft = left;

        }
        cntS[s[left]]--;
        left++;
      }

    }
    return ansLeft < 0 ? "" : S.substring(ansLeft,ansRight+1);
  }
  private boolean isCovered(int [] cntS,int [] cntT) {
    for(int c = 'a'; c <= 'z'; c++) {
      if(cntS[c] < cntT[c]) {
        return false;
      }
    }
    for(int c = 'A'; c <= 'Z'; c++) {
      if(cntS[c] < cntT[c]) {
        return false;
      }
    }
    return true;
  }

}

时间复杂度分析

  • 初始化 cntT,遍历符串 t,时间复杂度是O(n)

  • for循环right 循环,执行 m 次,时间复杂度是O(m)

  • while 循环当中,left最多移动 m 次,时间复杂度是O(m)

  • isCovered 方法遍历的是字符集(A-Z, a-z),共 52 次,所以isCovered 方法本身的复杂度是O(1)

  • isCovered 总调用次数最多是2m次,所以总的时间复杂度是O(m)

  • 综上分析总的时间复杂度是O(m+n)

注意

  • 滑动窗口中两个指针各自单向遍历一次
  • 千万不要认为嵌套循环就一定是O(m^2)

如果这篇文章对你有帮助,欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力!

相关推荐
谙弆悕博士1 小时前
系统集成项目管理工程师教程(第3版)笔记——第17章:法律法规和标准规范
笔记·职场和发展·学习方法·业界资讯·软考·法律·法规
烬羽2 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米2 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
星空露珠3 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
QXWZ_IA5 小时前
桥梁数字孪生怎么落地?
人工智能·科技·算法·智能硬件·政务
Kel5 小时前
输出层与反分词(Output Layer & Detokenization)
人工智能·算法·架构
陕西企来客5 小时前
2026年7月技术好GEO优化方案:算法适配与内容策略
人工智能·算法·机器学习·技术好geo优化
风栖柳白杨5 小时前
【面试】AI算法工程师_空白自测版本
人工智能·算法·面试
imbackneverdie6 小时前
知网官宣:禁止 AI 列为论文署名作者,标注 Gemini、DeepSeek 等 AI 为作者的稿件统一下架
大数据·人工智能·ai·职场和发展·aigc·科研·高校
闪电悠米7 小时前
力扣hot100-73.矩阵置零-标记数组详解
算法·leetcode·矩阵