leetcode minimum window substring

class Solution {
public:
    bool findAll(vector<int> to_find,vector<int> has_find){
		bool flag=true;
		for(int i=0;i<256;i++){
			if(to_find[T[i]]<=has_find[T[i]]){
				flag=flag&&true;
			}
			else{
				flag=false;
				break;
			}
		}
		return flag;
	}
    string minWindow(string S, string T) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
		int lenT=T.length();
		int lenS=S.length();
		if(lenT==0)
			return "";
		if(lenS==0)
			return "";
        vector<int> to_find(256);
		vector<int> has_find(256);
		for(int i=0;i<lenT;i++){
			to_find[T[i]]++;
		}
		int left=0;
		int minleft=0;
		int minLength=INT_MAX;
		for(int i=0;i<lenS;i++){
			if(to_find[S[i]]>0){
				has_find[S[i]]++;
				//cout<<S[i];
				if(findAll(to_find,has_find)){//window contains all chars in T,then move left
					//assert(S[i]=='b');
					//cout<<"in"<<endl;
					//cout<<S[i]<<endl;
					while(true){//move left
						//cout<<has_find[S[left]]<<endl;
						//cout<<to_find[S[left]]<<endl;
						if(has_find[S[left]]<=to_find[S[left]]&&has_find[S[left]]!=0){//condition is left is redundant
							break;
						}
						//cout<<"in"<<endl;
						if(has_find[S[left]]!=0)
							has_find[S[left]]--;//
						left++;
					}
					if(minLength>(i-left+1)){//see if minlength
					
						minLength=i-left+1;
						minleft=left;
					}
					//has_find[S[left]]--;
					//left++;
					//cout<<S[left]<<endl;
				}
			}
		}
		if(minLength==INT_MAX){
			
			return "";
		}
		else{
			
			//cout<<minleft<<minLength;
			return S.substr(minleft,minLength);
		}
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值