[python]leetcode(76). Minimum Window Substring

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(endif(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;
  }

你可能感兴趣的:(python,substring,leetcode)