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 "";
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hebastast

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值