कोड लाइन को लाइन से तोड़ते हैं।
int चेकर = 0; हम एक चेकर शुरू कर रहे हैं जो हमें डुप्लिकेट मान खोजने में मदद करेगा।
int val = str.charAt (i) - 'ए'; हम अक्षर के ASCII मान को स्ट्रिंग के 'i'th स्थान पर प्राप्त कर रहे हैं और इसे' a 'के ASCII मान के साथ घटाते जा रहे हैं। चूंकि धारणा यह है कि स्ट्रिंग केवल कम वर्ण है, 26 तक सीमित वर्णों की संख्या है। हेस, 'वैल' का मान हमेशा> = 0 होगा।
यदि ((चेकर और (1 << वैल))> 0) गलत है;
चेकर | = (1 << वैल);
अब यह मुश्किल हिस्सा है। आइए हम स्ट्रिंग "एबीसीडा" के साथ एक उदाहरण पर विचार करें। यह आदर्श रूप से गलत होना चाहिए।
लूप पुनरावृत्ति के लिए 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: 00000000000000000000000000001001000
चेकर & (1 << val): 00000000000000000000000000000000 नहीं है> 0
इसलिए चेकर: 00000000000000000000000000001111
लूप पुनरावृत्ति 5 के लिए:
चेकर: 00000000000000000000000000001111
वैल: 97-97 = 0
1 << 0: 00000000000000000000000000000001
चेकर & (1 << val): 00000000000000000000000000000001> 0 है
इसलिए झूठे लौटे।