您的位置:首页 > 其它

LeetCode Minimum Window Substring

2017-01-13 15:26 267 查看
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
For example,
S = 
"ADOBECODEBANC"

T = 
"ABC"


Minimum window is 
"BANC"
.
Note:

If there is no such window in S that covers all characters in T, return the empty string 
""
.
If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
思路一:最小滑动窗口方法,与substring with concatenation of all words的方法类似.
class Solution {
public:
    string minWindow(string s, string t) {
        string result="";
        if(s.empty() || t.empty())
            return result;
            
        unordered_map<char,int> map,newMap;
        for(int i=0;i<t.length();i++)
            map[t[i]]++;
        
        
        int min=0x7fffffff;
        int start=0,end,count=0;
        int sLen = s.length(),tLen = t.length();

        for(end=0;end<sLen;end++)
        {
            if(map.find(s[end]) != map.end())
            {
                if(newMap[s[end]] < map[s[end]])
                {
                    count++;
                }
                newMap[s[end]]++;
                
                if(count == tLen)
                {
                    while(map.find(s[start]) == map.end() || newMap[s[start]] > map[s[start]])
                    {
                        newMap[s[start]]--;
                        start++;
                    }
                    if(end-start+1 < min)
                    {
                        min = end-start+1;
                        result =s.substr(start,min);
                    }
                }
            }
        }
        return result;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode