Longest Substring Without Repeating Characters

Find the length of the longest substring without repeating characters.

Medium

Examples

Example 1: "abcabcbb" → 3 ("abc")

Implementation

Ruby

    # 🟦 Longest Substring Without Repeating Characters
    #
    # Problem Statement:
    # Given a string s, find the length of the longest substring without repeating characters.
    #
    # Input Examples:
    #   length_of_longest_substring("abcabcbb") => 3  # "abc"
    #   length_of_longest_substring("bbbbb") => 1     # "b"
    #
    # Time Complexity: O(n)

    def length_of_longest_substring(s)
      left = 0                         # Start of window
      seen = {}                        # Map of char => last seen index
      max_len = 0                      # Track longest window size

      s.chars.each_with_index do |char, right|
        # If we've seen this char and it's within the current window, shrink from left
        if seen[char] && seen[char] >= left
          puts "⚠️  Duplicate '#{char}' at #{right}, moving left from #{left} to #{seen[char] + 1}"
          left = seen[char] + 1
        end

        seen[char] = right             # Update last seen index
        current_len = right - left + 1
        max_len = [ max_len, current_len ].max

        puts "Window: '#{s[left..right]}' (#{left}-#{right}), Length = #{current_len}, Max = #{max_len}"
      end

      puts "✅ Final max length: #{max_len}"
      max_len

Complexity Analysis

Time Complexity: O(n)
Space Complexity: O(k)

Patterns & Techniques

Problem Details

Category: Pointer And Sliding Window
Difficulty: Medium
Module: PointerAndSlidingWindow
Method: length_of_longest_substring
← Back to Pointer And Sliding Window