input: Write a python function to find the minimum length of a substring in s1 that contains all characters of s2.
  assert min_substring_length("ADOBECODEBANC", "ABC") == 4
  assert min_substring_length("a", "a") == 1
  assert min_substring_length("a", "aa") == 2
  assert min_substring_length("ab", "A") == 3
output: def min_substring_length(s1, s2):
      from collections import Counter
  
      if not s2:
          return 0
  
      s2_count = Counter(s2)
      window_count = Counter()
  
      have, need = 0, len(s2_count)
      res = float('inf')
      left = 0
  
      for right, char in enumerate(s1):
          window_count[char] += 1
          if char in s2_count and window_count[char] == s2_count[char]:
              have += 1
  
          while have == need:
              res = min(res, right - left + 1)
              window_count[s1[left]] -= 1
              if s1[left] in s2_count and window_count[s1[left]] < s2_count[s1[left]]:
                  have -= 1
              left += 1
  
      return res if res != float('inf') else len(s1) + 1