# Program to find minimum string size that contains given substring in Python

PythonServer Side ProgrammingProgramming

Suppose we have two strings s and t, we have to find the size of a minimum substring in s that contains all the characters of t. If there is no such substring exists then return -1.

So, if the input is like s = "thegrumpywizardmakes" t = "wake", then the output will be 10, as the shortest substring that contains "wake" is "wizardmake" (length of 10).

To solve this, we will follow these steps −

• counter := frequency of each character in b

• start := 0

• min_subs := inf

• rem := count of distinct characters in b

• for end in range 0 to size of a, do

• current := a[end]

• if current is in counter, then

• counter[current] := counter[current] - 1

• if counter[current] is same as 0, then

• rem := rem - 1

• while rem is same as 0, do

• prev_char := a[start]

• if prev_char is in counter, then

• counter[prev_char] := counter[prev_char] + 1

• if counter[prev_char] > 0, then

• rem := rem + 1

• min_subs := minimum of min_subs and (end - start + 1)

• start := start + 1

• return min_subs when min_subs is not inf otherwise -1

## Example (Python)

Let us see the following implementation to get better understanding −

class Solution:
def solve(self, a, b):
counter = {}
for char in b:
counter[char] = counter.get(char, 0) + 1
start = 0
min_subs = float("inf")
rem = len(counter)
for end in range(len(a)):
current = a[end]
if current in counter:
counter[current] -= 1
if counter[current] == 0:
rem -= 1
while rem == 0:
prev_char = a[start]
if prev_char in counter:
counter[prev_char] += 1
if counter[prev_char] > 0:
rem += 1
min_subs = min(min_subs, end - start + 1)
start += 1
return min_subs if min_subs != float("inf") else -1
ob = Solution()
s = "thegrumpywizardmakes"
t = "wake"
print(ob.solve(s, t))

## Input

"thegrumpywizardmakes", "wake"

## Output

2