[python]leetcode(76). Minimum Window Substring

来源:互联网 发布:linux换行 编辑:程序博客网 时间:2024/06/02 10:33

problem

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

solution

class Solution(object):    def minWindow(self, s, t):        from collections import defaultdict        begin, end = 0, 0        head, length = 0, float('inf')        counter = len(t)        d = defaultdict(int)        for i in t:            d[i] += 1        while end < len(s):            if d[s[end]] > 0:                counter -= 1            d[s[end]] -= 1                end += 1            while counter == 0:                if end - begin < length:                    head = begin                    length = end - begin                if d[s[begin]] == 0:                    #只有在t中出现的字符才会等于零                    counter += 1                d[s[begin]] += 1                begin += 1        return '' if length == float('inf') else s[head:head+length]

模板

当给定一个字符串让我们去找它的符合某些条件的子串时,通常使用哈希表和两个指针(滑动窗口),来解决问题。

int findSubstring(string s){        vector<int> map(128,0);        int counter; // check whether the substring is valid        int begin=0, end=0; //two pointers, one point to tail and one  head        int d; //the length of substring        for() { /* initialize the hash map here */ }        while(end<s.size()){            if(map[s[end++]]-- ?){  /* modify counter here */ }            while(/* counter condition */){                  /* update d here if finding minimum*/                //increase begin to make it invalid/valid again                if(map[s[begin++]]++ ?){ /*modify counter here*/ }            }              /* update d here if finding maximum*/        }        return d;  }
原创粉丝点击