| 123456789101112131415161718192021222324252627 |
- # 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).
- # https://leetcode.com/problems/minimum-window-substring/description/
- def minWindow(self, s, t):
- # initialize a hash table to store chars and their occurances
- t_table = {i_t: 0 for i_t in t}
- for i_t in t:
- t_table[i_t] += 1
- # two pointers and the window
- begin, end, head = 0, 0, 0
- dist = float('inf')
- len_s = len(s)
- for end in range(len_s):
- # if the char is found in the substring, decrement by 1
- if s[end] in t_table:
- t_table[s[end]] -= 1
- # if all chars are found, start moving the begin pointer
- while all([v <= 0 for v in t_table.values()]):
- if s[begin] in t_table:
- # increment by 1 so that we can check next potential substring
- t_table[s[begin]] += 1
- # store the window if the length is min so far
- if end - begin < dist:
- head = begin
- dist = end - head
- begin += 1
- return s[head:(head+dist+1)] if dist < float('inf') else ''
|