def aligne(s1, s2): """le score du meilleur alignement de s1 et s2""" n1, n2 = len(s1), len(s2) sc = [[0] * (n2 + 1) for _ in range(n1 + 1)] # première ligne et première colonne for i in range(1, n1 + 1): sc[i][0] = -i for j in range(1, n2 + 1): sc[0][j] = -j # le reste for i in range(1, n1 + 1): for j in range(1, n2 + 1): s = max(-1 + sc[i - 1][j], -1 + sc[i][j - 1]) if s1[i - 1] == s2[j - 1]: sc[i][j] = max(s, 1 + sc[i - 1][j - 1]) else: sc[i][j] = max(s, -1 + sc[i - 1][j - 1]) return sc[n1][n2]