76. Minimum Window Substring(图解)

76. Minimum Window Substring

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).

Example:

Input: S = "ADOBECODEBANC", T = "ABC"
Output: "BANC"

Solution

C++

class Solution {
public:
    string minWindow(string s, string t) {
        int i = 0, j = 0;
        int global_min_left = 0, global_min = INT_MAX;
        vector<int> a(128, 0);
        for(int k = 0; k < t.length(); ++k) {
            a[t[k]]++;
        }
        int count = t.length();
        while(j < s.length()) {
            if(a[s[j]] > 0) {
                --count;
            }
            --a[s[j]];
            ++j;
            while(count == 0) {
                if(j-i < global_min) {
                    global_min = j - i;
                    global_min_left = i;
                }
                ++a[s[i]];
                if(a[s[i]] > 0) {
                    ++count;
                }
                ++i;
            }
        }
        if(global_min == INT_MAX) return "";
        return s.substr(global_min_left, global_min);
    }
};

Explanation
76. Minimum Window Substring(图解)_第1张图片

你可能感兴趣的:(Leetcode,Favorate,[图解])