首页 > 其他分享 >76. 最小覆盖子串C

76. 最小覆盖子串C

时间:2024-02-27 21:22:40浏览次数:26  
标签:子串 head hash int 最小 char 76 return ns

int hash(char c){
    return c-'A'+1;
}

bool judge_Same(int a[],int b[]){
    for(int i=0;i<200;i++){
        if(b[i]!=0 && b[i]>a[i]) return false;
    }
    return true ;
}


char* minWindow(char* s, char* t) {
    int ns=strlen(s);
    int ts=strlen(t);
    char* tem=(char*)malloc(sizeof(char)*(ns+1));
    for(int i=0;i<=ns;i++) tem[i]=0;
    if(ns<ts) return tem;
    if(strcmp(s,t)==0) return s;
    if(ts==1){
        for(int i=0;i<ns;i++){
            if(s[i]==t[0]) return t;
        }
        return tem;
    }
    int head=0,tail=0;//区间始末
    int a[200]={0};
    int b[200]={0};
    for(int i=0;i<ts;i++){
        b[hash(t[i])]++;
    }
    int minhead=0,minn=ns+1;
    a[hash(s[0])]++;
    while(head<=tail && tail<ns){
        if(!judge_Same(a,b)){
            if(tail==ns-1) break;
            tail++;
            a[hash(s[tail])]++;
        }else{
            if(minn>tail-head+1){
                minhead=head;
                minn=tail-head+1;
            }
            a[hash(s[head++])]--;
            while(b[hash(s[head])]==0){
                a[hash(s[head++])]--;
            }
        }
    }
    if(minn!=ns+1){
        for(int i=minhead;i<minhead+minn;i++){
            tem[i-minhead]=s[i];
        }
    }
    return tem;
}

结果:

 

标签:子串,head,hash,int,最小,char,76,return,ns
From: https://www.cnblogs.com/llllmz/p/18038387

相关文章

  • 209. 长度最小的子数组C
    滑动窗口的妙用!!intminSubArrayLen(inttarget,int*nums,intnumsSize){intsum=nums[0];//区间head到tail的和inthead=0,tail=0;intminn=numsSize;inttag=0;if(numsSize==0)return-1;while(head<=tail&&tail<numsSize){......
  • CF776D(并查集思想)
    难度1em还是一道比较套路的题目。观察发现,如果当\(r_{i}=1\)时他的两把钥匙状态是相同的,当\(r_{i}=0\)时他的两把钥匙状态是不同的,对于这种相同不同的问题可以考虑并差集,状态一样就一样的并在一起,否则就把不一样的并在一起所以以后看见这些问题(a=b+k,a=!b,a=b)都可以用带权并查......
  • P6805 (树上最小路径覆盖思想)
    难度3比较有意思的一道题。首先看到题目是求树上最小路径覆盖,自然想到由叶子入手去分析,所以当子树内有偶数个叶子节点时,那么就有两个叶子向上匹配,否则只有一个叶子向上匹配。这个东西可以用树剖维护,线段树维护的是子树内有多少个偶的,相当于一个区间反转一类的东西。细节不算多,但......
  • Leetcode 76. 最小覆盖子串
    题目描述(难度hard)给你一个字符串S、一个字符串T,请在字符串S里面找出:包含T所有字母的最小子串。示例:输入:S="ADOBECODEBANC",T="ABC"输出:"BANC"说明:如果S中不存这样的子串,则返回空字符串""。如果S中存在这样的子串,我们保证它是唯一的答案。解题思路......
  • 【算法】【字符串】无重复字符的最长子串
    1 题目给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子字符串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为无重复字符的最长子字符串是"b......
  • R语言中实现广义相加模型GAM和普通最小二乘(OLS)回归
    原文链接:http://tecdat.cn/?p=20882 原文出处:拓端数据部落公众号 1导言这篇文章探讨了为什么使用广义相加模型 是一个不错的选择。为此,我们首先需要看一下线性回归,看看为什么在某些情况下它可能不是最佳选择。 2回归模型假设我们有一些带有两个属性Y和X的数据。如果它......
  • Go 100 mistakes - #76: time.After and memory leaks
       ......
  • LeetCode] 2476. Closest Nodes Queries in a Binary Search Tree
    Youaregiventherootofabinarysearchtreeandanarrayqueriesofsizenconsistingofpositiveintegers.Finda2Darrayanswerofsizenwhereanswer[i]=[mini,maxi]:miniisthelargestvalueinthetreethatissmallerthanorequaltoqueries[......
  • 高颜值小板!华硕ROG STRIX B760-G GAMING WIFI S小吹雪评测:稳上8000!
    一、前言:连细节都尽善尽美的高颜值小吹雪主板在一众B760主板中,华硕的B760小吹雪在颜值、性能和做工方面做到了很好的平衡,很多想要打造白色小型主机的玩家都会首选这块主板。现在,升级版的ROGSTRIXB760-GGAMINGWIFIS小吹雪来了。ROGSTRIXB760-GGAMINGWIFIS小吹雪主板......
  • 代码随想录 day60 回文子串 最长回文子序列
    回文子串dp[i][j]:[i,j]范围内为回文子串递推式分三种情况①:ij相等显然是回文②:j-i<1且s[i]==s[j]显然是回文③:j-i>1且dp[i+1][j-1]为true也就是当前两端元素相同看元素内部是否是回文如果是显然是ij范围内是回文初始化必须初始化falset......