Permet de décomposer le code ligne par ligne.
vérificateur int = 0; Nous lançons un vérificateur qui nous aidera à trouver les valeurs en double.
int val = str.charAt (i) - 'a'; Nous obtenons la valeur ASCII du caractère à la «i» position de la chaîne et la soustrayons avec la valeur ASCII de «a». Puisque l'hypothèse est que la chaîne est composée uniquement de caractères inférieurs, le nombre de caractères est limité à 26. Hece, la valeur de «val» sera toujours> = 0.
if ((checker & (1 << val))> 0) return false;
vérificateur | = (1 << val);
Maintenant, c'est la partie délicate. Prenons un exemple avec la chaîne "abcda". Cela devrait idéalement renvoyer false.
Pour l'itération de boucle 1:
Vérificateur: 00000000000000000000000000000000
val: 97-97 = 0
1 << 0: 00000000000000000000000000000001
checker & (1 << val): 00000000000000000000000000000000 n'est pas> 0
D'où le vérificateur: 00000000000000000000000000000001
Pour l'itération de boucle 2:
Vérificateur: 00000000000000000000000000000001
val: 98-97 = 1
1 << 0: 00000000000000000000000000000010
checker & (1 << val): 00000000000000000000000000000000 n'est pas> 0
D'où le vérificateur: 00000000000000000000000000000011
Pour l'itération de boucle 3:
Vérificateur: 00000000000000000000000000000011
val: 99-97 = 0
1 << 0: 00000000000000000000000000000100
checker & (1 << val): 00000000000000000000000000000000 n'est pas> 0
D'où le vérificateur: 00000000000000000000000000000111
Pour l'itération de boucle 4:
Vérificateur: 00000000000000000000000000000111
val: 100-97 = 0
1 << 0: 00000000000000000000000000001000
checker & (1 << val): 00000000000000000000000000000000 n'est pas> 0
D'où le vérificateur: 00000000000000000000000000001111
Pour l'itération de boucle 5:
Vérificateur: 00000000000000000000000000001111
val: 97-97 = 0
1 << 0: 00000000000000000000000000000001
checker & (1 << val): 00000000000000000000000000000001 est> 0
Par conséquent, retournez false.