76. Minimum Window Substring

class Solution {
public:
    string minWindow(string s, string t) {
        int start=0;//start为在s中搜索的开始下标
        int end=0;//end为在s中搜索的结束下标
        int count=t.size();//count表示t中要在s中搜索的字符的个数
        vector<int> map(128,0);//用来存储t中字符和 字符个数的映射
        for(auto c:t)map[c]++;
        int minstart=0;
        int minlen=INT_MAX;
        while(end<s.size())
        {
            if(map[s[end]]>0)//如果s[end]在t中则剩余要搜索的字符减少
                count--;
            map[s[end]]--;//如果s[end]不在t中则map[s[end]]变成负数
            end++;
            while(count==0)//寻找到了t中所有的字符
            {
                if(end-start<minlen)//更新最短window长度 更新start来寻找更短的window长度
                {
                    minstart=start;
                    minlen=end-start;
                }
                map[s[start]]++;
                if(map[s[start]]>0)//s[start]在t中则map[s[start]]>0  改变要在s中搜索的字符的个数
                    count++;
                start++;
            }
        }
        if(minlen!=INT_MAX)
            return s.substr(minstart,minlen);
        else 
            return "";
    }
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值