Minimum Window Substring

sString
ADOBECODEBANC
tString
ABC
1def minWindow(s, t):
2  target_map = {}
3  for char in t:
4    target_map[char] = target_map.get(char, 0) + 1
5
6  minLen = float('inf')
7  left = 0
8  window_map = {}
9  formed = 0
10  required = len(target_map)
11
12  for right in range(len(s)):
13    char = s[right]
14    window_map[char] = window_map.get(char, 0) + 1
15
16    if char in target_map and window_map[char] == target_map[char]:
17      formed += 1
18
19    while formed == required and left <= right:
20      if right - left + 1 < minLen:
21        minLen = right - left + 1
22        minStart = left
23
24      left_char = s[left]
25      window_map[left_char] -= 1
26
27      if left_char in target_map and window_map[left_char] < target_map[left_char]:
28        formed -= 1
29
30      left += 1
31    
32  if minLen == float('inf'):
33    return ""
34  else:
35    return s[minStart:minStart + minLen]
36
0 / 53
ADOBECODEBANC