leetcode 76. Minimum Window Substring

用unordered_map存储t中的字符和存储的次数,l是字符串最左边的字符的位置,r是字符串最右边字符的位置,count是s中从l到r这一区间成功匹配t中字符个数。当count的个数跟t的大小一样大(也就是成功匹配),就将当前子串的size和min_size比较以更新min_size,会出现一种情况,l位置的字符并不在t中,这样可以继续移动l以求得真正的min_size

class Solution {
public:
    string minWindow(string s, string t) {
        int length1 = s.size();
        int length2 = t.size();
        if(length1 <= 0 || length2 <= 0)
            return "";
        unordered_map<char,int> container;
        for(int i = 0;i < length2;i++)
            container[t[i]]++;
        int l = 0,count = 0,min_l = 0,min_size = s.size() + 1;
        for(int r = 0;r < length1;r++){
            if(container.find(s[r]) != container.end()){
                if(--container[s[r]] >= 0)
                    count++;
                while(count == t.size()){
                    int size = r - l + 1;
                    if(size < min_size){
                        min_l = l;
                        min_size = size;
                    }
                    if(container.find(s[l]) != container.end()){
                        if(++container[s[l]] > 0)
                            count--; 
                    }
                    l++;
                }
            }
        }
        if(min_size > s.size())
             return "";
        return s.substr(min_l, min_size);      
    }
};

 https://blog.csdn.net/makuiyu/article/details/44570193

原文地址:https://www.cnblogs.com/ymjyqsx/p/9788379.html