</> MAANG.io
coding interview ยท 101

Foundations

Master coding interviews with comprehensive coverage of data structures, algorithms, and problem-solving techniques. Progress from fundamentals to advanced topics with expertly curated content.

0/255 solved 0% complete

Rolling Dictionary

What is this?

Sometimes you don't just care how big the window is โ€” you care exactly which letters are inside it. So as the window slides like a spotlight across a string, you keep a little tally of each character it covers. When a letter slides in you bump its count up; when one slides out you bump it down. Checking whether the window matches some target then becomes a quick glance at the tally instead of re-counting from scratch.

flowchart TD A["Window slides over the string"] --> B["A letter enters so bump its count up"] A --> C["A letter leaves so bump its count down"] B --> D["Compare the tally to the target"] C --> D

๐Ÿ’ก Fun fact: This rolling-count trick is the backbone of fast text search in tools like grep, and a close cousin โ€” the rolling hash โ€” powers plagiarism detectors and Git's own delta compression by fingerprinting sliding chunks of data.

๐Ÿ”“ The 3 problems in this chapter are free. Sign in with Google or Microsoft to start solving.


Core idea: When a window problem is about which characters are inside (not just a sum), carry a rolling frequency map that you update one-in / one-out as the window slides. Comparing that map to a target tells you, in O(1) with a match-counter, whether the window is an anagram / permutation / exact match โ€” turning repeated re-counting into a single pass.


The move

The move: maintain count[] for the window; slide with count[entering] += 1 and count[leaving] -= 1; valid when window counts == target counts (track a match-counter for O(1))

The subtlety is what you compare: a multiset match (anagram/permutation โ€” order doesn't matter) versus an ordered match (exact substring search โ€” order does matter).


The problems

Rolling dictionary branches into Find All Anagrams (multiset, all indices), Permutation in String (multiset, exists?) and First Occurrence / strStr (ordered match)

  • Find All Anagrams in a String โ€” fixed window, return every index whose count map equals the pattern's.
  • Permutation in String โ€” same engine as an existence check with early exit.
  • Find the Index of the First Occurrence โ€” the contrast: ordered matching (use a sliding compare, or rolling-hash / KMP), not a multiset.

Key takeaways

  • Carry a count map and update it incrementally โ€” one in, one out per slide.
  • A match-counter compares two maps in O(1) (track how many letters are at the target count).
  • Multiset vs ordered: anagrams/permutations ignore order; substring search needs exact order.
  • Why interviewers love it: it tests whether you maintain derived state incrementally instead of recomputing.

Start here: Find All Anagrams in a String, then Permutation in String.

Permutation in String

Core idea: A permutation of s1 is just a substring of s2 with the exact same letter multiset as s1. So slide a fixed-size window of width len(s1) across s2, keep a rolling count map that you update in O(1) per step (add the entering char, drop the leaving char), and ask one question at every position: do these counts match s1's counts? The first time they do, return True and stop.


1. The problem, in a fresh setting

LeetCode 567. Given two lowercase strings s1 and s2, return True if s2 contains any substring that is a permutation of s1 โ€” otherwise False. ("Permutation of s1" = a rearrangement of s1's letters, i.e. an anagram of s1 appearing as a contiguous chunk of s2.)

Reframed: you have a bag of letters (the multiset of s1). You're scanning a long ribbon of text. Is there anywhere on the ribbon a contiguous stretch that uses exactly that bag โ€” same letters, same counts, no more, no less? You only need a yes/no, so the moment you find one window that matches, you're done.

s1 s2 Output Why
"ab" "eidbaooo" True window "ba" is a permutation of "ab"
"ab" "eidboaoo" False no length-2 window is {a:1, b:1}
"abc" "bbbca" False no length-3 window has one each of a, b, c
"adc" "dcda" True window "dca" matches {a:1, c:1, d:1}

Sign in to continue reading

The rest of this lesson is available with a free account. Signing in with Google or Microsoft is free.

Sign in to read the full lesson

Sign in to MAANG.io

Use your Google or Microsoft account โ€” no password to remember.

Continue with Google Continue with Microsoft

Please accept the terms above to continue.