Ces fonctions paires trouveront la plus longue chaîne commune dans une gamme arbitraire de chaînes:
def long_substr(data):
substr = ''
if len(data) > 1 and len(data[0]) > 0:
for i in range(len(data[0])):
for j in range(len(data[0])-i+1):
if j > len(substr) and is_substr(data[0][i:i+j], data):
substr = data[0][i:i+j]
return substr
def is_substr(find, data):
if len(data) < 1 and len(find) < 1:
return False
for i in range(len(data)):
if find not in data[i]:
return False
return True
print long_substr(['Oh, hello, my friend.',
'I prefer Jelly Belly beans.',
'When hell freezes over!'])
Sans doute l'algorithme pourrait être amélioré et je ne l'ai pas eu beaucoup d'exposition à Python, alors peut-être que cela pourrait être plus efficace sur le plan syntaxique, mais cela devrait faire l'affaire.
EDIT: dans la deuxième fonction is_substr comme démontré par J.F. Sebastian. L'utilisation reste la même. Note: pas de changement à l'algorithme.
def long_substr(data):
substr = ''
if len(data) > 1 and len(data[0]) > 0:
for i in range(len(data[0])):
for j in range(len(data[0])-i+1):
if j > len(substr) and all(data[0][i:i+j] in x for x in data):
substr = data[0][i:i+j]
return substr
Hope this helps,
Jason.
Cochez ici pour [Analyse de la correspondance de sous-chaîne commune la plus longue] (http://www.msccomputerscience.com/2014/10/analysis-of-longest-common-substring_18.html) – ARJUN