Consente di suddividere il codice riga per riga.
int checker = 0; Stiamo avviando un controllo che ci aiuterà a trovare valori duplicati.
int val = str.charAt (i) - 'a'; Stiamo ottenendo il valore ASCII del carattere nella posizione "i" della stringa e sottraendolo con il valore ASCII di "a". Poiché si presume che la stringa contenga solo caratteri inferiori, il numero di caratteri è limitato a 26. Hece, il valore di 'val' sarà sempre> = 0.
if ((checker & (1 << val))> 0) restituisce false;
checker | = (1 << val);
Ora questa è la parte difficile. Consideriamo un esempio con la stringa "abcda". Questo dovrebbe idealmente restituire false.
Per iterazione loop 1:
Controllo: 00000000000000000000000000000000
val: 97-97 = 0
1 << 0: 0000000000000000000000000000000001
checker & (1 << val): 0000000000000000000000000000000000 non è> 0
Quindi checker: 0000000000000000000000000000000001
Per iterazione loop 2:
Controllo: 00000000000000000000000000000001
val: 98-97 = 1
1 << 0: 0000000000000000000000000000000010
checker & (1 << val): 0000000000000000000000000000000000 non è> 0
Quindi checker: 0000000000000000000000000000000011
Per l'iterazione ciclica 3:
Controllo: 00000000000000000000000000000011
val: 99-97 = 0
1 << 0: 0000000000000000000000000000000100
checker & (1 << val): 0000000000000000000000000000000000 non è> 0
Quindi checker: 00000000000000000000000000000011
Per iterazione in loop 4:
Controllo: 00000000000000000000000000000111
val: 100-97 = 0
1 << 0: 00000000000000000000000000001001
checker & (1 << val): 0000000000000000000000000000000000 non è> 0
Quindi checker: 0000000000000000000000000000001111
Per iterazione loop 5:
Controllo: 00000000000000000000000000001111
val: 97-97 = 0
1 << 0: 0000000000000000000000000000000001
checker & (1 << val): 0000000000000000000000000000000001 è> 0
Quindi restituire false.