leetcode-最小覆盖子串

给定两个字符串 s 和 t,长度分别是 m 和 n,返回 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

s 和 t 由英文字母组成

思路:维护区间内s字符串的字符数,因为题目中说的是覆盖t串,所以判断s字符串指定区间内的t字符串中的字符数是否大于t中的字符数。

c 复制代码
class Solution {
    public String minWindow(String s, String t) {
        Map<Character,Integer> mp = new HashMap<>();
        int[] sArray = new int[53];
        int[] tArray = new int[53];

        for(int i = 0;i<t.length();i++){
            if(t.charAt(i)>='a'&&t.charAt(i)<='z'){
                tArray[t.charAt(i)-'a']++;
            }
            if(t.charAt(i)>='A'&&t.charAt(i)<='Z'){
                tArray[t.charAt(i)-'A'+26]++;
            }
        }
        int start = 0;
        int len = s.length()+1;
        String res = "";
        for(int i = 0;i<s.length();i++){
            if(s.charAt(i)>='a' && s.charAt(i)<='z'){
                sArray[s.charAt(i)-'a']++;
            }
            if(s.charAt(i)>='A' && s.charAt(i)<='Z'){
                sArray[s.charAt(i)-'A'+26]++;
            }
            while(start<=i&&isAllContains(sArray,tArray)){
                if(len>i-start+1){
                    len = i-start+1;
                    res = s.substring(start,i+1);
                }
                if(s.charAt(start)>='a' && s.charAt(start)<='z'){
                    sArray[s.charAt(start)-'a']--;
                }
                if(s.charAt(start)>='A' && s.charAt(start)<='Z'){
                    sArray[s.charAt(start)-'A'+26]--;
                }
                start++;
            }
        }
        return res;
    }
    boolean isAllContains(int[] s,int[] t){
        boolean flag = true;
        for(int i = 0;i<53;i++){
            if(t[i]>s[i]){
                flag = false;
                break;
            }
        }
        return flag;
    }
}
相关推荐
计算机魔术师几秒前
【AI面试八股文 | 面试题库】AI工程师面试题库:100+来源的系统性解题思路
人工智能·面试·职场和发展·ai工程师面试·system design
ICscholar19 分钟前
推荐系统常用指标NDCG含义及公式
人工智能·深度学习·算法
闲人xyz20 分钟前
01|把一次用户请求做成可持续执行的回合:主循环才是 Agent 的骨架
算法·面试
超级码力66624 分钟前
【Latex魔术注解+导言区】Latex魔术注解+导言区分类介绍
算法·数学建模
闲人xyz29 分钟前
02|Tool Runtime 不是工具箱,而是行动层:从 FileRead / FileEdit 看到 Agent 工程
算法
AI专业测评33 分钟前
2026网文圈大地震:顶配AI写作神器实测,这几款让“代练”彻底失业
人工智能·算法·aigc·ai写作
智者知已应修善业35 分钟前
【数字稳压控制DAC/TLC5615驱动】2023-5-27
c++·经验分享·笔记·算法·51单片机
爱写代码的倒霉蛋36 分钟前
2021年天梯赛L1-8
数据结构·算法
阿Y加油吧38 分钟前
动态规划入门必刷:不同路径 & 最小路径和 详解
算法·动态规划
ximen502_1 小时前
算法面试题
java·数据结构·算法