
Comment Vérifier si Deux Chaînes de Caractères sont à une Distance d'Édition L'une de l'Autre ? (avec Exemples de Code)
Découvrez comment déterminer si deux chaînes de caractères peuvent être transformées l'une en l'autre avec une seule modification : ajout, suppression ou substitution. Optimisé pour une complexité temporelle O(m+n), où m et n sont les longueurs des chaînes, cet article fournit une solution efficace et pratique avec des exemples de code clairs. Facile à comprendre, ce guide détaillé vous permettra de maîtriser rapidement cette technique.
Comprendre la Distance d'Édition : Un Concept Essentiel
La distance d'édition entre deux chaînes mesure le nombre minimal d'opérations (insertions, suppressions, substitutions) nécessaires pour transformer l'une en l'autre. Comprendre ce concept est crucial dans de nombreux domaines, de la correction orthographique à la bio-informatique. Notre objectif est de déterminer si cette distance est exactement égale à un.
Détection d'Une Seule Différence : L'Algorithme Expliqué
Voici comment vérifier si deux chaînes (s1 et s2) ont une distance d'édition de un :
-
Vérification préliminaire de la longueur : Si la différence de longueur entre s1 et s2 est supérieure à 1, elles ne peuvent pas être à une distance d'édition de 1.
-
Parcours Simultané :
- Parcourez les deux chaînes simultanément.
- Comptez les différences rencontrées.
-
Gestion des Différences :
- Si une différence est détectée, incrémentez le compteur d'éditions.
- Si ce compteur dépasse 1, retournez "false".
- Si les longueurs diffèrent, avancez dans la chaîne la plus longue (suppression).
- Sinon, avancez dans les deux chaînes (substitution).
-
Gestion des Caractères Restants : Si une chaîne a des caractères supplémentaires à la fin, cela compte comme une édition.
-
Résultat final : Retournez "true" si le nombre total d'éditions est exactement 1.
Pourquoi cette méthode est-elle plus efficace que la programmation dynamique ?
La méthode simple, avec une complexité de O(m+n), est plus efficace que la programmation dynamique (O(n^2)) car elle évite le calcul coûteux d'une matrice de distances. Elle se concentre uniquement sur la détection d'une seule différence, ce qui réduit considérablement le temps de calcul.
Exemples de Code : C++, Java, Python3, C#, Javascript
Les exemples suivants démontrent l'implémentation de cet algorithme dans différents langages de programmation :
C++
// C++ program to check if given two strings are
// at distance one.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
// Returns true if edit distance between s1 and
// s2 is one, else false
bool isEditDistanceOne(string s1, string s2) {
// Find lengths of given strings
int m = s1.length(), n = s2.length();
// If difference between lengths is more than
// 1, then strings can't be at one distance
if (abs(m - n) > 1)
return false;
int count = 0; // Count of edits
int i = 0, j = 0;
while (i < m && j < n) {
// If current characters don't match
if (s1[i] != s2[j]) {
if (count == 1)
return false;
// If length of one string is
// more, then only possible edit
// is to remove a character
if (m > n)
i++;
else if (m < n)
j++;
else { // If lengths of both strings is same
i++;
j++;
}
// Increment count of edits
count++;
}
else { // If current characters match
i++;
j++;
}
}
// If last character is extra in any string
if (i < m || j < n)
count++;
return count == 1;
}
// Driver program
int main() {
string s1 = "gfg";
string s2 = "gf";
isEditDistanceOne(s1, s2) ? cout << "Yes" : cout << "No";
return 0;
}
Java
Python3
C#
Javascript
Cas d'utilisation Concrets
- Correction Orthographique : Suggérer des corrections proches d'un mot mal orthographié.
- Bio-informatique : Comparer des séquences d'ADN avec des mutations mineures.
- Détection de Fraude : Identifier des transactions similaires avec des modifications minimes.
Conclusion : Maîtrisez Rapidement la Distance d'Édition
Cet article offre une solution concise et efficace pour vérifier si deux chaînes sont à une distance d'édition de un. En utilisant la technique de parcours simultané, vous pouvez facilement implémenter cet algorithme dans divers langages de programmation. Les exemples de code clairs vous guideront à travers les étapes, vous permettant de maîtriser rapidement ce concept crucial pour de nombreuses applications.