前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode 76. 最小覆盖子串 (双指针,map)

Leetcode 76. 最小覆盖子串 (双指针,map)

作者头像
glm233
发布2020-09-28 14:40:50
2910
发布2020-09-28 14:40:50
举报

76. 最小覆盖子串

给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。

示例:

代码语言:javascript
复制
输入: S = "ADOBECODEBANC", T = "ABC"
输出: "BANC"

说明:

  • 如果 S 中不存这样的子串,则返回空字符串 ""
  • 如果 S 中存在这样的子串,我们保证它是唯一的答案。

i是前指针,j是后指针,i>=j,每次遍历的时候次数都减一,当减到零为止有效字符数+1,有效字符数达到匹配串时,更新答案,注意更新后指针,当且仅当已经出现两次匹配串时才更新后指针,注意要把减去的次数加回来!

代码语言:javascript
复制
class Solution {
public:
    string minWindow(string s, string t) {
        unordered_map<char,int>p;
        for(char c:t)p[c]++;
        int k=p.size();
        int st=0,len=INT_MAX,cnt=0;
        for(int i=0,j=0,cnt=0;s[i];i++)
        {
            if(p[s[i]]==1)cnt++;
            p[s[i]]--;
            while(p[s[j]]<0)p[s[j++]]++;
            if(cnt==k)
            {
                if(len>i-j+1)
                {
                    len=i-j+1;
                    st=j;
                }
            }
            //cout<<cnt<<endl;
        }
        return len==INT_MAX?"":s.substr(st,len);
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档