Open In App

Python – Number of positions where Substrings Match of Length K

Given 2 Strings, count positions where substrings of Length K Match.

Input : test_str1 = ‘geeksforgeeks’, test_str2 = ‘peeksformeeks’, K = 4 



Output : 4 

Explanation : 4 positions match K length Substrings. 



Input : test_str1 = ‘geeksforgeeks’, test_str2 = ‘peeksformeeks’, K = 5 

Output : 3 

Explanation : 3 positions match K length Substrings.

Method #1 : Using list comprehension + min() + slicing

In this, we iterate through strings till length of minimum string, and the comparison is done by slicing using string slicing. Iteration is done through loop inside list comprehension.




# Python3 code to demonstrate working of
# Number of positions where Substrings Match of Length K
# Using list comprehension + min() + slicing
 
# initializing strings
test_str1 = 'geeksforgeeks'
test_str2 = 'peeksformeeks'
 
# printing original strings
print("The original string 1 is : " + str(test_str1))
print("The original string 2 is : " + str(test_str2))
 
# initializing K
K = 3
 
# checking for substrings,
# using len() to get total count
res = len([test_str1[idx : idx + K] for idx in range(min(len(test_str1), len(test_str2)) - K - 1)
        if test_str1[idx : idx + K] == test_str2[idx : idx + K]])
 
# printing result
print("Number of positions of matching K length Substrings : " + str(res))

Output
The original string 1 is : geeksforgeeks
The original string 2 is : peeksformeeks
Number of positions of matching K length Substrings : 5

Method #2 : Using map() + list comprehension

In this, we extract all K length substrings of one string and then using in operator and map, check for each substring if present in other String, this ignores the positional factor of problem.




# Python3 code to demonstrate working of
# Number of positions where Substrings Match of Length K
# Using map() + list comprehension
 
# initializing strings
test_str1 = 'geeksforgeeks'
test_str2 = 'peeksformeeks'
 
# printing original strings
print("The original string 1 is : " + str(test_str1))
print("The original string 2 is : " + str(test_str2))
 
# initializing K
K = 3
 
# Extracting Substrings
subs_str = [test_str1[idx : idx + K] for idx in range(len(test_str1) - K - 1)]
 
# checking in other string
# using count() to get number
res = list(map(lambda ele: ele in test_str2, subs_str)).count(True)
 
# printing result
print("Number of positions of matching K length Substrings : " + str(res))

Output
The original string 1 is : geeksforgeeks
The original string 2 is : peeksformeeks
Number of positions of matching K length Substrings : 5

Time Complexity: O(n)

Auxiliary Space: O(n)

Method #3:  Using set intersection and zip function

Step by step Algorithm:

  1. Initialize the strings and the length of the matching substrings (K).
  2. Create two sets using the zip() function to get tuples of (character in test_str1, character in test_str2) for both strings, where the tuples are created for the indices up to K-1.
  3. Get the set difference between the two sets obtained in step 2 to get all the tuples of matching substrings.
  4. Count the number of elements in the resulting set.
  5. Subtract 1 from the count obtained in step 4 to exclude the overlap at the start of the strings.
  6. Return the count as the final result.




test_str1 = 'geeksforgeeks'
test_str2 = 'peeksformeeks'
 
# printing original strings
print("The original string 1 is : " + str(test_str1))
print("The original string 2 is : " + str(test_str2))
 
# initializing K
K = 3
 
# using set intersection and zip function to count
res = len(set(zip(test_str1, test_str2)) - set(zip(test_str1[:K-1], test_str2[:K-1])))
res = res-1;
# printing result
print("Number of positions of matching K length Substrings : " + str(res))

Output
The original string 1 is : geeksforgeeks
The original string 2 is : peeksformeeks
Number of positions of matching K length Substrings : 9

Time complexity: O(n), where n is the length of the shortest string. 

Space complexity: O(n), where n is the length of the shortest string. 


Article Tags :