Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,35 @@
|
|||
def _set_of_substrings(s:str) -> set:
|
||||
"_set_of_substrings('ABBA') == {'A', 'AB', 'ABB', 'ABBA', 'B', 'BA', 'BB', 'BBA'}"
|
||||
len_s = len(s)
|
||||
return {s[m: n] for m in range(len_s) for n in range(m+1, len_s +1)}
|
||||
|
||||
def _set_of_common_substrings(s:str, common: set) -> set:
|
||||
"Substrings of s that are also in common"
|
||||
len_s = len(s)
|
||||
return {this for m in range(len_s) for n in range(m+1, len_s +1)
|
||||
if (this := s[m:n]) in common}
|
||||
|
||||
def lcs_ss(*strings):
|
||||
"longest of the common substrings of all substrings of each string"
|
||||
strings_iter = (s for s in strings)
|
||||
common = _set_of_substrings(next(strings_iter)) # First string substrings
|
||||
for s in strings_iter:
|
||||
if not common:
|
||||
break
|
||||
common = _set_of_common_substrings(s, common) # Accumulate the common
|
||||
|
||||
return max(common, key= lambda x: len(x)) if common else ''
|
||||
|
||||
|
||||
s0 = "thisisatest_stinger"
|
||||
s1 = "testing123testingthing"
|
||||
s2 = "thisis"
|
||||
|
||||
ans = lcs_ss(s0, s1)
|
||||
print(f"\n{repr(s0)}, {repr(s1)} ->> {repr(ans)}")
|
||||
ans = lcs_ss(s0, s2)
|
||||
print(f"\n{repr(s0)}, {repr(s2)} ->> {repr(ans)}")
|
||||
ans = lcs_ss(s1, s2)
|
||||
print(f"\n{repr(s1)}, {repr(s2)} ->> {repr(ans)}")
|
||||
ans = lcs_ss(s0, s1, s2)
|
||||
print(f"\n{repr(s0)}, {repr(s1)}, {repr(s2)} ->> {repr(ans)}")
|
||||
Loading…
Add table
Add a link
Reference in a new issue