240
笔下虽有千言,胸中实无一策

30 Day Challenge Day 11 | Leetcode 76. Minimum Window Substring

题解

双指针法,移动窗口法(Sliding Window)

很重要的题。

这道题要求地很细,移动窗口的时候,要同时记录,开始位置、长度和包含目标字符的个数count。

class Solution {
public:
    string minWindow(string s, string t) {
        int min_start = 0, min_len = INT_MAX;
        int start = 0, end = 0;
        int count = t.size();

        unordered_map<char, int> m;
        for(char c : t) m[c]++;

        while(end < s.size()) {
            if(m[s[end]] > 0) count--;
            m[s[end]]--;
            
            while(count == 0) {
                m[s[start]]++;
                
                if(end-start+1 < min_len) {
                    min_start = start;
                    min_len = end-start+1;
                }
                
                if(m[s[start]] > 0) count++;
                start++;
            }

            end++;
        }

        if(min_len == INT_MAX) return "";
        
        return s.substr(min_start, min_len);
    }
};
posted @ 2020-09-20 10:04  CasperWin  阅读(93)  评论(0编辑  收藏  举报