LeetCode-in-All

3. Longest Substring Without Repeating Characters

Medium

Given a string s, find the length of the longest substring without repeating characters.

Example 1:

Input: s = “abcabcbb”

Output: 3

Explanation: The answer is “abc”, with the length of 3.

Example 2:

Input: s = “bbbbb”

Output: 1

Explanation: The answer is “b”, with the length of 1.

Example 3:

Input: s = “pwwkew”

Output: 3

Explanation: The answer is “wke”, with the length of 3. Notice that the answer must be a substring, “pwke” is a subsequence and not a substring.

Example 4:

Input: s = “”

Output: 0

Constraints:

Solution

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function (s) {
    const lastIndices = new Array(256).fill(-1)
    let maxLen = 0
    let curLen = 0
    let start = 0

    for (let i = 0; i < s.length; i++) {
        const cur = s.charCodeAt(i)

        if (lastIndices[cur] < start) {
            lastIndices[cur] = i
            curLen++
        } else {
            const lastIndex = lastIndices[cur]
            start = lastIndex + 1
            curLen = i - start + 1
            lastIndices[cur] = i
        }

        maxLen = Math.max(maxLen, curLen)
    }

    return maxLen
}

export { lengthOfLongestSubstring }