Algorithmsminimum window tracking

Minimum Window Tracking (Finding Smallest Valid Window)

TT
Testlaa Team
May 14, 20262 min read

Minimum window problems ask for the shortest contiguous segment satisfying a constraint (all required characters, sum ≥ target, at least k odd numbers). Usually expand then shrink while recording best.

Why this shows up in the real world

Smallest patch that fixes failing tests in CI, shortest disclaimer covering all legal clauses, or minimum sample size in analytics that still captures every demographic bucket—same “cover all requirements minimally” vibe.

Core idea (explained for students)

Use a frequency map of “need” vs “have” for multiset coverage. Expand R until satisfied, then move L while still satisfied to tighten, update answer, then continue expanding R.

Try this in Python

from collections import Counter


def min_window(s: str, t: str) -> str:
    need = Counter(t)
    required = len(need)
    formed = 0
    wc: dict[str, int] = {}
    L, best = 0, (10**9, 0, 0)

    for R, ch in enumerate(s):
        wc[ch] = wc.get(ch, 0) + 1
        if ch in need and wc[ch] == need[ch]:
            formed += 1
        while formed == required:
            if R - L + 1 < best[0]:
                best = (R - L + 1, L, R)
            left = s[L]
            wc[left] -= 1
            if left in need and wc[left] < need[left]:
                formed -= 1
            L += 1

    return "" if best[0] > len(s) else s[best[1] : best[2] + 1]


print(min_window("ADOBECODEBANC", "ABC"))

Common mistakes

  • Recording best before fully shrinking from the left.
  • Forgetting to remove characters from the “have” map when L advances.
  • O(|alphabet|) scans each step—keep satisfied checks O(1) with a counter of fulfilled requirements.

Key takeaways

  • Classic template for substring covering problems.
  • Pair with need / formed counters for clarity.

Tags:

Sliding windowPythonStudents