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