Find the length of the longest substring without repeating characters.
"abcabcbb" → 3 ("abc")
# 🟦 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
O(n)
O(k)