package com.thealgorithms.strings ;
import java.util.HashMap ;
class longestNonRepeativeSubstring {
public static int lengthOfLongestSubstring(String s) {
int max = 0 , start = 0 , i = 0 ;
HashMap< Character , Integer > map = new HashMap<>() ;
while ( i < s.length() ) {
char temp = s.charAt( i ) ;
// adding key to map if not present
if ( ! map.containsKey( temp ) )
map.put( temp , 0 ) ;
// checking if the first value is the dublicate value
else if ( s.charAt( start ) == temp )
start++ ;
// checking if the previous value is dublicate value
else if ( s.charAt( i - 1 ) == temp ) {
if ( max < map.size() ) max = map.size() ;
map = new HashMap<>() ;
start = i ;
i-- ;
}
// last possible place where dublicate value can be is between start and i
else {
if ( max < map.size() ) max = map.size() ;
while ( s.charAt( start ) != temp ) {
map.remove( s.charAt( start ) ) ;
start++ ;
}
start++ ;
}
i++ ;
}
if ( max < map.size() ) max = map.size() ;
return max ;
}
}
Β© Alger 2022