코드를 한 줄씩 세분화합니다.
정수 검사기 = 0; 중복 값을 찾는 데 도움이되는 검사기를 시작합니다.
int val = str.charAt (i)- 'a'; 문자열의 'i'위치에서 문자의 ASCII 값을 가져와 ASCII 값 'a'로 뺍니다. 문자열이 더 낮은 문자 일 뿐이라고 가정하므로 문자 수는 26 개로 제한됩니다. 히스, 'val'값은 항상> = 0입니다.
if ((검사기 & (1 << val))> 0) false를 반환합니다.
검사기 | = (1 << val);
이제 까다로운 부분입니다. 문자열 "abcda"가 포함 된 예를 살펴 보겠습니다. 이상적으로 false를 반환해야합니다.
루프 반복 1의 경우 :
검사기 : 00000000000000000000000000000000
발 : 97-97 = 0
1 << 0 : 00000000000000000000000000000001
검사기 & (1 << val) : 00000000000000000000000000000000이> 0이 아님
따라서 검사기 : 00000000000000000000000000000001
루프 반복 2의 경우 :
검사기 : 00000000000000000000000000000001
발 : 98-97 = 1
1 << 0 : 00000000000000000000000000000010
검사기 & (1 << val) : 00000000000000000000000000000000이> 0이 아님
따라서 검사기 : 00000000000000000000000000000011
루프 반복 3의 경우 :
검사기 : 00000000000000000000000000000011
발 : 99-97 = 0
1 << 0 : 00000000000000000000000000000100
검사기 & (1 << val) : 00000000000000000000000000000000이> 0이 아님
따라서 검사기 : 00000000000000000000000000000111
루프 반복 4의 경우 :
검사기 : 00000000000000000000000000000111
발 : 100-97 = 0
1 << 0 : 00000000000000000000000000001000
검사기 & (1 << val) : 00000000000000000000000000000000이> 0이 아님
따라서 검사기 : 00000000000000000000000000001111
루프 반복 5의 경우 :
검사기 : 00000000000000000000000000001111
발 : 97-97 = 0
1 << 0 : 00000000000000000000000000000001
검사기 & (1 << val) : 00000000000000000000000000000001은> 0
따라서 거짓을 반환합니다.