Longest Substring Without Repeating Characters

Longest Substring Without Repeating Characters

int lengthOfLongestSubstring(string s) {
    if (s.size() == 0) return 0;
    int curLen = 0;
    int maxLen = 0;
    // remember last occurrence of each character
    vector<int> pos(256, -1);

    for(int i=0;i<s.size();++i) {
        int prepos = pos[s[i]];
        // if not seen before or outside current range, keep counting
        if (prepos == -1 || i - prepos > curLen) {
            ++curLen;
        } else {
            // otherwise update max and reset current length
            maxLen = max(maxLen, curLen);
            curLen = i-prepos;
        }
        // always record character position for lookup
        pos[s[i]] = i;
    }

    maxLen = max(maxLen, curLen);
    return maxLen;
}

#DP