Given two strings ‘X’ and ‘Y’, print the longest common sub-string. Examples:
Input : X = "Lazyroar", Y = "GeeksQuiz" Output : Geeks Input : X = "zxabcdezy", Y = "yzabcdezx" Output : abcdez
We have existing solution for this problem please refer Print the longest common substring link. We will solve problem in python using SequenceMatcher.find_longest_match() method.
How SequenceMatcher.find_longest_match(aLow,aHigh,bLow,bHigh) method works ?
First we initialize SequenceMatcher object with two input string str1 and str2, find_longest_match(aLow,aHigh,bLow,bHigh) takes 4 parameters aLow, bLow are start index of first and second string respectively and aHigh, bHigh are length of first and second string respectively. find_longest_match() returns named tuple (i, j, k) such that a[i:i+k] is equal to b[j:j+k], if no blocks match, this returns (aLow, bLow, 0).
Implementation:
Python3
# Function to find Longest Common Sub-string from difflib import SequenceMatcher def longestSubstring(str1,str2): # initialize SequenceMatcher object with # input string seqMatch = SequenceMatcher( None ,str1,str2) # find match of longest sub-string # output will be like Match(a=0, b=0, size=5) match = seqMatch.find_longest_match( 0 , len (str1), 0 , len (str2)) # print longest substring if (match.size! = 0 ): print (str1[(match.a: match.a + match.size)]) else : print ( 'No longest common sub-string found' ) # Driver program if __name__ = = "__main__" : str1 = 'Lazyroar' str2 = 'GeeksQuiz' longestSubstring(str1,str2) |
Geeks