| 
	
	
		
		
		
		
		 white_raven, 
 
все просто и стандартно - ищем максимальный отрезок, для этого помним текущий наилучший результат, а в процессе обхода строки набираем отрезок-претендент. 
 
Текущий максимум - в переменных maxStart и maxLength (начало и длина). 
 
Претендент начинается с позиции start, его длина на каждой итерации равна (i - start). 
 
В массиве map хранится последняя найденная позиция для каждой буквы. Процитированный тобой кусок - это когда на очередной итерации встретилась такая буква, которая уже есть в набираемом отрезке. Тогда прекращаем его набирать, смотрим, превзошел ли он максимум, если да, то сохраняем. И начинаем набирать новый отрезок со след. символа после найденной буквы. 
 
Затраты по операциям - O(N), здесь меньше нельзя. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 |