Longest substring not working for repeating characters

198 Views Asked by At

I have a fairly standard moving window function to find longest substring.

var lengthOfLongestSubstring = function (s) {
    let currentString = [];
    let longestStringLength = 0;
    let longestString = [];

    for (let i = 0; i < s.length; i++) {
        // Attempt to get the current character's position in the current string
        const currentCharacterPosition = currentString.indexOf(s[i]);

        // Check if the current character exists in the current string
        if (currentCharacterPosition !== -1) {
            // Chop array of the first occurrence of the character
            currentString.splice(0, currentCharacterPosition + 1);
        }

        // Add the current character to the array
        currentString.push(s[i]);

        // Store the current string length if bigger than the existing record
        if (longestStringLength < currentString.length) {
            longestStringLength = currentString.length;
            longestString = currentString;
            console.log("Inside " + currentString + ", " + longestString + " " + longestStringLength);            
        }
        console.log("Outside " + currentString + ", " + longestString + " " + longestStringLength);

    }

};

let result = lengthOfLongestSubstring("abcabcbb");

Output is

Inside a, a 1
Outside a, a 1
Inside a,b, a,b 2
Outside a,b, a,b 2
Inside a,b,c, a,b,c 3
Outside a,b,c, a,b,c 3
Outside b,c,a, b,c,a 3
Outside c,a,b, c,a,b 3
Outside a,b,c, a,b,c 3
Outside c,b, c,b 3
Outside b, b 3

ISSUE: Why is "longestString" outside the 2nd if loop changing in value? I'm not updating it anywhere

I tried with the following and it works just fine. Some strings work without any issue. E.g:

let result = lengthOfLongestSubstring("abcabcbbdfeghj");

0

There are 0 best solutions below