public class E48LongestSubstringWithoutDuplication {
public static int count ( String str) {
if ( str == null || str. length ( ) == 0 )
return - 1 ;
int maxLength = 0 ;
int currentLength = 0 ;
int [ ] positions = new int [ 26 ] ;
for ( int i = 0 ; i < 26 ; i ++ )
positions[ i] = - 1 ;
for ( int i = 0 ; i < str. length ( ) ; i ++ ) {
int preposition = positions[ str. charAt ( i) - 'a' ] ;
if ( preposition < 0 || i - preposition > currentLength) {
currentLength ++ ;
}
else {
if ( currentLength > maxLength)
maxLength = currentLength;
currentLength = i - preposition;
}
positions[ str. charAt ( i) - 'a' ] = i;
}
if ( currentLength > maxLength)
maxLength = currentLength;
return maxLength;
}
public static void main ( String[ ] args) {
String str = "arabcacfr" ;
System. out. println ( E48LongestSubstringWithoutDuplication. count ( str) ) ;
}
}