Kod satır satır ayrılmak sağlar.
int denetleyicisi = 0; Yinelenen değerleri bulmamıza yardımcı olacak bir denetleyici başlatıyoruz.
int val = str.charAt (i) - 'a'; Dizenin 'i' konumunda karakterin ASCII değerini alıp 'a' ASCII değeri ile çıkarıyoruz. Varsayım, dizenin yalnızca daha düşük karakterler olması nedeniyle, karakter sayısı 26 ile sınırlıdır. Bu nedenle, 'val' değeri her zaman> = 0 olacaktır.
eğer ((checker & (1 << val))> 0) yanlış döndürürse;
denetleyici | = (1 << val);
Şimdi bu zor kısım. "Abcda" dizesini içeren bir örneği ele alalım. Bu ideal olarak yanlış döndürmelidir.
Döngü yinelemesi 1 için:
Denetleyici: 00000000000000000000000000000000
val: 97-97 = 0
1 << 0: 00000000000000000000000000000001
denetleyicisi & (1 << val): 00000000000000000000000000000000> 0 değil
Bu nedenle denetleyici: 00000000000000000000000000000001
Döngü yinelemesi 2 için:
Denetleyici: 00000000000000000000000000000001
val: 98-97 = 1
1 << 0: 00000000000000000000000000000010
denetleyicisi & (1 << val): 00000000000000000000000000000000> 0 değil
Bu nedenle denetleyici: 00000000000000000000000000000011
Döngü yinelemesi 3 için:
Denetleyici: 00000000000000000000000000000011
val: 99-97 = 0
1 << 0: 00000000000000000000000000000100
denetleyicisi & (1 << val): 00000000000000000000000000000000> 0 değil
Bu nedenle denetleyici: 00000000000000000000000000000111
Döngü yinelemesi 4 için:
Denetleyici: 00000000000000000000000000000111
val: 100-97 = 0
1 << 0: 00000000000000000000000000001000
denetleyicisi & (1 << val): 00000000000000000000000000000000> 0 değil
Bu nedenle denetleyici: 00000000000000000000000000001111
Döngü yinelemesi 5 için:
Denetleyici: 00000000000000000000000000001111
val: 97-97 = 0
1 << 0: 00000000000000000000000000000001
denetleyicisi ve (1 << val): 00000000000000000000000000000001> 0
Bu nedenle yanlış döndürür.