O(n^2) - Brute Force

int lengthOfLongestSubstring(char* s) {
    int length = strlen(s);
    int max_len = 0;
    for (int i = 0; i < length; i++) {
        int hash_tab[256] = {0};
        int count = 0;
        for (int j = i; j < length; j++) {
            if (hash_tab[s[j]] == 1) break;
            else {
                hash_tab[s[j]] = 1;
                count++;
            }
        }
        if (count > max_len) max_len = count;
    }
    return max_len;
}

O(n) - Sliding Window

int lengthOfLongestSubstring(char* s) {
    int start = 0;
    int len = strlen(s);
    int max_len = 0;
    int hashtab[256];
    memset(hashtab, -1, sizeof(hashtab));
 
    for (int i = 0; i < len; i++) {
        if (hashtab[s[i]] >= start) start = hashtab[s[i]] + 1;
        hashtab[s[i]] = i;
        int count = i - start + 1;
        if (count > max_len) max_len = count;
    }
    return max_len;
}