LeetCode 76. Minimum Window Substring 时间复杂度(O( n))

时间复杂度(O( n))

class Solution {
public:
    string minWindow(string s, string t) {
        vector<bool> chsocurr(128,0);
        vector<int> chscount(128,0);
        for(int i=0;i<t.size();++i){
            chsocurr[t.at(i)]=1;
            chscount[t.at(i)]+=1;
        }
        int count=0;
        for(int ii=0;ii<chsocurr.size();++ii)        if(chsocurr[ii]) count+=1;
        
        int start=0;
        int start_record=0;
        int minLen = s.length();
        for(int j=0;j<s.length();++j){
            if(chsocurr[s.at(j)]){
                if(chscount[s.at(j)]>0){
                    chscount[s.at(j)]-=1;
                    if(chscount[s.at(j)]==0 && count>0) count-=1;
                }else    chscount[s.at(j)]-=1;
            }
            while(start<=j&&(chsocurr[s.at(start)]==0||(chsocurr[s.at(start)]&&chscount[s.at(start)]<0))){
                if(chsocurr[s.at(start)])    chscount[s.at(start)]+=1;
                start+=1;
            }
            if(count==0&&minLen>j-start){
                minLen = j-start;
                start_record=start;
            }
        }
        if(count>0)return "";
        return s.substr(start_record,minLen+1);
    }
};

猜你喜欢

转载自blog.csdn.net/ziyue246/article/details/81773149