I want to build a function which finds the longest substring that is common between two large strings. I want to do this using the first two functions.
I'm running it on very large strings (containing more than million characters) and it's taking a lot of time. How can I optimize the function findlongest
?
def hash_sequence(string, k):
dictionary={}
for i in range(len(string)-(k-1)):
sequence = string[i:i+k]
dictionary.setdefault(sequence,[]).append(i)
return dictionary
def intersects(string1, string2, k): #what if k=0?
dictionary = hash_sequence(string1, k)
for i in range(len(string2)-1): #O(n) for sybstring in string
if string2[i:i+k] in dictionary: #O(n
return string2[i:i+k]
return None
def findlongest(string1,string2):
if intersects(string1,string2,1)==None:
return None
for i in range(2,min(len(string1),len(string2))):
if intersects(string1,string2,i)==None:
return intersects(string1,string2,i-1),len(intersects(string1,string2,i-1))