S'il est nécessaire que la répétition soit consécutive pour que ce soit considéré comme doublon, l'algorithme est très simple.
Il faut supposer que au moment où on ajoute une nouvelle lettre X, la chaîne C ne comporte pas de doublon.
Il suffit donc de comparer toutes les sous-chaînes se terminant par X avec les sous-chaines immédiatement précédentes, évidemment de même longueur. Sachant que la longueur des sous-chaînes à comparer doit être inférieure ou égale à la moitié de la longueur totale de chaîne C+X.
La formule principale est la suivante
sous-chaine(C+X, LG-lg+1, lg) == sous-chaine(C+X, LG-2*lg+1, lg)
telle que :
- sous-chaine renvoie la sous-chaîne de la chaine de caractères fournie en premier paramètre.
- C+X est la chaîne construite jusqu'à présent avec la nouvelle lettre aléatoire ajoutée en fin de chaîne.
- LG est la longueur de la chaîne C+X
- lg est la longueur des sous-chaînes à comparer. Il faut faire varier cette valeur entre 1 et LG / 2 pour tester la présence de doublons consécutifs.
Si la formule principale est vérifiée pour une des valeurs de lg (entre 1 et LG/2), alors il y a doublon et il faut régénérer une nouvelle lettre X, sinon, on peut valider la nouvelle lettre X à la chaîne C (donc faire C = C + X).
Bon courage.
Partager