76. Minimum Window Substring

来源:互联网 发布:华为网络管理系统 编辑:程序博客网 时间:2024/06/16 12:20

这道题给出两个字符串s和t,求s中包含t中所有字母的最小的窗。

- 我们最开始先扫描一遍T,把对应的字符及其出现的次数存到哈希表中。

- 然后开始遍历S,遇到T中的字符,就把对应的哈希表中的value减一,直到包含了T中的所有的字符,纪录一个字串并更新最小字串值。

- 将子窗口的左边界向右移,直到没能包含t中所有字符,然后往右移动右边界。移动左边界的时候略掉不在T中的字符,如果某个在T中的字符出现的次数大于哈希表中的value,则也可以跳过该字符。

class Solution {public:    string minWindow(string s, string t) {        if(t.size() > s.size()) return "";        string res;        int left = 0, count = 0, minLen = s.size() + 1;        unordered_map<char, int> m;        for(int i = 0; i < t.size(); ++i){            ++m[t[i]];                    }        for(int right = 0; right < s.size(); ++right){            if(m.find(s[right]) != m.end()){                --m[s[right]];                if(m[s[right]] >= 0) ++count;                while(count == t.size()){                    if(right - left + 1 < minLen){                        minLen = right - left + 1;                        res = s.substr(left, minLen);                    }                    if(m.find(s[left]) != m.end()){                        m[s[left]]++;                        if(m[s[left]] > 0)  count--;                    }                    left++;                }            }        }        return res;    }};


原创粉丝点击