Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python - how to find all intersections of two strings?

How to find all intersections (also called the longest common substrings) of two strings and their positions in both strings?

For example, if S1="never" and S2="forever" then resulted intersection must be ["ever"] and its positions are [(1,3)]. If S1="address" and S2="oddness" then resulted intersections are ["dd","ess"] and their positions are [(1,1),(4,4)].

Shortest solution without including any library is preferable. But any correct solution is also welcomed.

like image 480
psihodelia Avatar asked Sep 27 '11 15:09

psihodelia


People also ask

How do you calculate intersection in Python?

Python count intersection of sets To count the intersection of sets in Python, we will use “len(set(set1) & set(set2))”. Here, ” & “ is an intersection element common to both. It will return the count as “3” because “10, 8, and 6” are common to both the sets.

How do you find the union of two strings?

The task of performing string union can be computed by naive method by creating an empty string and checking for new occurrence of character common to both string and not common strings and appending it and hence computing the new union string. This can be achieved by loops and if/else statements.


1 Answers

Well, you're saying that you can't include any library. However, Python's standard difflib contains a function which does exactly what you expect. Considering that it is a Python interview question, familiarity with difflib might be what the interviewer expected.

In [31]: import difflib

In [32]: difflib.SequenceMatcher(None, "never", "forever").get_matching_blocks()
Out[32]: [Match(a=1, b=3, size=4), Match(a=5, b=7, size=0)]


In [33]: difflib.SequenceMatcher(None, "address", "oddness").get_matching_blocks()
Out[33]: [Match(a=1, b=1, size=2), Match(a=4, b=4, size=3), Match(a=7, b=7, size=0)]

You can always ignore the last Match tuple, since it's dummy (according to documentation).

like image 180
Michał Bentkowski Avatar answered Oct 03 '22 15:10

Michał Bentkowski