Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Program to find minimum string size that contains given substring in Python
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