Altcademy - a Forbes magazine logo Best Coding Bootcamp 2023

How to Find the Longest Substring without Repeating Characters in JavaScript

Learn how to efficiently find the longest substring without repeating characters in JavaScript with this comprehensive guide.

How to Find the Longest Substring without Repeating Characters in JavaScript
Photo by Florian Olivo / Unsplash

Finding the longest substring without repeating characters is a common problem in programming. It is a problem where you have to find the longest sequence of unique characters in a given string. In this blog post, we will discuss a step-by-step approach to solve this problem using JavaScript. We will also learn some essential programming concepts along the way.

Understanding the Problem

Before we dive into solving the problem, let's make sure we understand what we are trying to accomplish. The problem statement is as follows:

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

For example, if the input string is "abcabcbb", the longest substring without repeating characters is "abc", and its length is 3. If the input string is "bbbbbb", the longest substring without repeating characters is "b", and its length is 1.

Our goal is to write a JavaScript function that takes a string as input and returns the length of the longest substring without repeating characters.

Approach to Solve the Problem

To solve this problem, we can use a technique called the "sliding window". The sliding window is a way to process a sequence of data (in this case, characters in a string) by maintaining a continuous "window" of elements. The window "slides" over the data, processing each element within the window and updating the result accordingly.

Here's a high-level overview of our approach:

  1. Initialize a "window" with the first character of the input string.
  2. Slide the window to the right, one character at a time, adding the next character to the window.
  3. If a character is repeated within the window, remove the previous occurrence of the character from the window.
  4. Keep track of the maximum length of the window (i.e., the longest substring without repeating characters) as we slide it.
  5. Return the maximum length of the window once we have processed all characters in the input string.

Now that we have a general idea of how to solve the problem, let's implement the solution in JavaScript.

Implementing the Solution in JavaScript

Creating the Function

First, let's create a JavaScript function called longestSubstringLength. This function will take a single argument, the input string, and return the length of the longest substring without repeating characters.

function longestSubstringLength(s) {
  // Our code will go here
}

Using a Sliding Window

Next, let's implement the sliding window technique. We will use two pointers, left and right, to represent the start and end of the window, respectively. Initially, both pointers will be set to the first character of the input string.

We will also need a data structure to keep track of the characters in the window and their positions in the input string. We can use a JavaScript object for this purpose.

function longestSubstringLength(s) {
  let left = 0;
  let right = 0;
  let charPositions = {};
}

Handling Repeated Characters

Now, let's slide the window to the right, one character at a time, and update the window and character positions accordingly.

As we slide the window, we need to check if the current character at the right pointer is already in the window (i.e., it is a repeated character). If it is, we need to remove the previous occurrence of the character from the window and update the left pointer.

We can do this by checking if the current character is present in the charPositions object. If it is, we update the left pointer to be one position to the right of the previous occurrence of the character. This effectively removes the previous occurrence from the window.

function longestSubstringLength(s) {
  let left = 0;
  let right = 0;
  let charPositions = {};
  let maxLength = 0;

  while (right < s.length) {
    let currentChar = s[right];

    if (charPositions.hasOwnProperty(currentChar) && charPositions[currentChar] >= left) {
      left = charPositions[currentChar] + 1;
    }

    // Update the rest of the code
  }
}

Returning the Longest Substring Length

As we slide the window, we also need to keep track of the maximum length of the window, which represents the longest substring without repeating characters.

We can do this by updating a variable called maxLength each time we slide the window. We set maxLength to be the maximum of its current value and the length of the current window (i.e., right - left + 1).

Finally, once we have processed all characters in the input string, we return maxLength as the result.

function longestSubstringLength(s) {
  let left = 0;
  let right = 0;
  let charPositions = {};
  let maxLength = 0;

  while (right < s.length) {
    let currentChar = s[right];

    if (charPositions.hasOwnProperty(currentChar) && charPositions[currentChar] >= left) {
      left = charPositions[currentChar] + 1;
    }

    maxLength = Math.max(maxLength, right - left + 1);
    charPositions[currentChar] = right;
    right++;
  }

  return maxLength;
}

Testing the Solution

Now that we have implemented the solution, let's test it on some example input strings to make sure it works correctly.

console.log(longestSubstringLength("abcabcbb")); // Output: 3 (Longest substring: "abc")
console.log(longestSubstringLength("bbbbbb"));   // Output: 1 (Longest substring: "b")
console.log(longestSubstringLength("pwwkew"));   // Output: 3 (Longest substring: "wke")

Conclusion

In this blog post, we have learned how to find the length of the longest substring without repeating characters in a given string using JavaScript. We used a sliding window technique to solve the problem and implemented a JavaScript function that takes a string as input and returns the length of the longest substring without repeating characters.

We hope this post has been helpful for those learning programming and JavaScript. Remember, practice is key when it comes to programming, so try to solve more problems and apply the concepts you have learned in this post to other problems you encounter. Happy coding!