
Comment vérifier rapidement si deux chaînes sont à une distance d'édition l'une de l'autre ?
Vous vous demandez si deux chaînes de caractères diffèrent d'une seule modification ? Découvrez une méthode rapide et efficace pour le déterminer. Cet article vous propose un guide clair et concis, accompagné d'exemples concrets.
Comprendre la notion de distance d'édition : 1 modification suffit !
La distance d'édition d'une seule unité signifie que l'on peut transformer une chaîne en une autre par une seule des actions suivantes:
- Ajout d'un caractère.
- Suppression d'un caractère.
- Modification d'un caractère.
Pourquoi s'intéresser à la distance d'édition ?
- Correction orthographique : Détecter les erreurs de frappe courantes.
- Recherche approximative : Trouver des correspondances proches dans une base de données.
- Bio-informatique : Comparer des séquences d'ADN.
Algorithme efficace : Vérification pas à pas
Au lieu d'une solution complexe en O(n^2), adoptons une approche linéaire en O(m+n), où m et n sont les longueurs des chaînes.
Étapes clés :
- Vérification préliminaire de la longueur : Si la différence de longueur dépasse 1, c'est impossible ! La fonction renvoie immédiatement
false
. - Initialisation : Un compteur d'éditions est initialisé à 0.
- Parcours simultané : Les deux chaînes sont parcourues caractère par caractère.
- Divergence détectée :
- Le compteur d'éditions est incrémenté.
- Si le compteur dépasse 1, la fonction renvoie
false
(trop de différences !). - La chaîne la plus longue est avancée (suppression implicite), ou les deux si le changement est une substitution.
- Correspondance : Les deux indices sont incrémentés.
- Divergence détectée :
- Caractère final : Si une chaîne a encore un caractère à la fin, incrémenter le compteur.
- Verdict : Retourner
true
si le compteur d'éditions vaut exactement 1. Sinon, retournerfalse
.
Exemples concrets pour une compréhension immédiate
s1 = "geeks", s2 = "geek"
: Oui, une suppression.s1 = "geeks", s2 = "geeks"
: Non, aucune modification.s1 = "geaks", s2 = "geeks"
: Oui, une modification.s1 = "peaks", s2 = "geeks"
: Non, deux modifications.
Implémentations dans différents langages
Des exemples d'implémentation sont proposés en C++, Java, Python3, C# et Javascript :
Tableaux comparatifs : Une vue d'ensemble
(L'article original contient des tableaux pour chaque langage, mais ils seraient trop longs à reproduire ici. Je vous encourage à consulter l'article source pour les implémentations complètes.)
Conclusion: Simplicité et efficacité
Cet algorithme simple et performant permet de déterminer rapidement si deux chaînes sont à une distance d'édition de un, ouvrant la porte à de nombreuses applications pratiques. Ne passez plus des heures sur des algorithmes complexes, concentrez-vous sur l'essentiel !