int longestSubstr(string S) {
if(S.size() <= 1){
return S.size();
}
int sl = S.size();
int sf[256] = {0};
int start = 0;
int max_length = INT_MIN;
int i;
for(i=0;i<sl;i++){
char ch = S[i];
if(sf[ch] == 0){
sf[ch]++;
}
else{
int curr_len = i - start;
max_length = max(max_length, curr_len);
while(S[start] != ch){
sf[S[start]]--;
start++;
}
start++;
sf[S[start]]++;
}
}
return max(max_length, i-start);
}