📘 Sliding Window Technique
🔍 What Is the Sliding Window Technique?
The Sliding Window is a powerful technique used to reduce the time complexity of problems involving contiguous subarrays or substrings.
Instead of using nested loops (\(O(n^2)\)), we “slide” a window of fixed or variable size across the input, adjusting it as we go — reducing most problems to \(O(n)\) time.
When to Use Sliding Window
-
You need to find or optimize subarrays/substrings (e.g., longest, smallest, total).
-
The input is linear (array or string).
-
You’re looking for problems involving:
- Sum / Count / Max / Min of a subarray
- Substring with unique or repeated elements
- Fixed or variable-sized window
🪟 Sliding Window Pattern
Template for fixed-size window
Find Max sum of subarray of size K
def sliding_window_fixed(arr, k):
window_sum = sum(arr[:k])
max_sum = window_sum
for i in range(k, len(arr)):
window_sum += arr[i] - arr[i - k]
max_sum = max(max_sum, window_sum)
return max_sum
Template for variable-size window
def sliding_window_variable(s):
window = {}
left = 0
result = 0
for right in range(len(s)):
# Expand window by adding s[right]
# window logic here...
while <some_condition>: # shrink
# Shrink window from the left
left += 1
result = max(result, right - left + 1)
return result
Ex : Longest Substring Without Repeating Characters
def length_of_longest_substring(s):
seen = {}
left = 0
max_len = 0
for right, char in enumerate(s):
if char in seen and seen[char] >= left:
left = seen[char] + 1
seen[char] = right
max_len = max(max_len, right - left + 1)
return max_len