您的位置:首页 > 其它

Minimum Window Substring -- leetcode

2015-04-12 20:46 387 查看
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 emtpy string
""
.

If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.

基本思路:

1. 维持一个窗口,使得[left, right] 包含子串T。

2. left尽可能向右靠近right,直到再多移动一步,窗口就不能包含字串T。

3. 在窗口向右滑动过程中,记录下最小的窗口。

class Solution {
public:
    string minWindow(string S, string T) {
        vector<int> modal(256);
        vector<int> actual(256);
        
        for (auto ch: T)
            ++modal[ch];
            
        int leftWnd = 0, rightWnd = S.size();
        int count = 0;
        for (int left = 0, right = 0; right < S.size(); ++right) {
            if (++actual[S[right]] <= modal[S[right]])
                ++count;
                
            if (count == T.size()) {
                while (!modal[S[left]] || actual[S[left]] > modal[S[left]])
                    --actual[S[left++]];
                
                if (right - left < rightWnd - leftWnd) {
                    rightWnd = right;
                    leftWnd = left;
                }
            }
        }
        
        if (count < T.size()) return "";
        
        return S.substr(leftWnd, rightWnd - leftWnd + 1);
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: