Discover how to find the tiniest piece of text that holds all your important clues without endless searching!
Why Minimum Window Substring in DSA Typescript?
Imagine you have a long paragraph and you want to find the shortest part that contains all the important keywords you need for your research.
Doing this by reading every possible part manually is tiring and slow.
Manually checking every possible substring to see if it contains all keywords takes a lot of time and effort.
It's easy to miss some keywords or waste time checking unnecessary parts.
The Minimum Window Substring method quickly finds the smallest part of the text that has all the keywords.
It uses a smart sliding window to move through the text only once, saving time and avoiding mistakes.
for (let start = 0; start < text.length; start++) { for (let end = start; end < text.length; end++) { if (substring from start to end contains all keywords) { update shortest substring } } }
let left = 0, right = 0; while (right < text.length) { add text[right] to window while (window contains all keywords) { update shortest substring remove text[left] from window left++ } right++ }
This method makes it easy to find the smallest section containing all needed items quickly and efficiently.
Finding the shortest part of a document that contains all the names of people you want to contact.
Manual search is slow and error-prone.
Minimum Window Substring uses a sliding window to solve the problem efficiently.
It helps find the smallest substring containing all required characters or words.
Practice
Minimum Window Substring problem?Solution
Step 1: Understand the problem statement
The problem asks to find the smallest part of a string that has all characters from another string.Step 2: Identify the goal
The goal is to find the minimum length substring that contains all required characters, not just any substring.Final Answer:
Find the smallest substring in a string that contains all characters of another string -> Option BQuick Check:
Minimum window substring = smallest substring with all chars [OK]
- Confusing with longest substring problems
- Ignoring the requirement to include all characters
- Thinking it's about sorting characters
t for the Minimum Window Substring problem?Solution
Step 1: Check correct Map usage in TypeScript
const freqMap = new Map(); for (const ch of t) { freqMap.set(ch, (freqMap.get(ch) ?? 0) + 1); } uses Map with get and set methods and handles undefined with nullish coalescing (?? 0).Step 2: Identify errors in other options
const freqMap = {}; for (let i = 0; i < t.length; i++) { freqMap[t[i]] = freqMap[t[i]] + 1; } uses object but does not initialize counts, causing NaN. const freqMap = new Map(); for (const ch of t) { freqMap[ch] = freqMap[ch] + 1; } uses Map but accesses like object property, which is incorrect. const freqMap = new Map(); for (const ch of t) { freqMap.set(ch, freqMap.get(ch) + 1); } does not handle undefined before adding 1, causing NaN.Final Answer:
const freqMap = new Map(); for (const ch of t) { freqMap.set(ch, (freqMap.get(ch) ?? 0) + 1); } -> Option CQuick Check:
Use Map.get with ?? 0 to avoid undefined [OK]
- Accessing Map like an object property
- Not initializing counts before increment
- Using object without initializing keys
s = "ADOBECODEBANC" and t = "ABC"?
function minWindow(s: string, t: string): string {
const freqMap = new Map();
for (const ch of t) freqMap.set(ch, (freqMap.get(ch) ?? 0) + 1);
let left = 0, right = 0, count = t.length, minLen = Infinity, start = 0;
while (right < s.length) {
const ch = s[right];
if (freqMap.has(ch)) {
freqMap.set(ch, freqMap.get(ch)! - 1);
if (freqMap.get(ch)! >= 0) count--;
}
while (count === 0) {
if (right - left + 1 < minLen) {
minLen = right - left + 1;
start = left;
}
const leftChar = s[left];
if (freqMap.has(leftChar)) {
freqMap.set(leftChar, freqMap.get(leftChar)! + 1);
if (freqMap.get(leftChar)! > 0) count++;
}
left++;
}
right++;
}
return minLen === Infinity ? "" : s.substring(start, start + minLen);
}
console.log(minWindow(s, t));Solution
Step 1: Understand the sliding window approach
The code uses two pointers expanding and shrinking the window to find the smallest substring containing all chars of t.Step 2: Trace the code with given input
The minimum window substring containing A, B, and C in s = "ADOBECODEBANC" and t = "ABC" is "BANC".Final Answer:
"BANC" -> Option AQuick Check:
Minimum window substring for "ABC" in "ADOBECODEBANC" is "BANC" [OK]
- Returning first found substring instead of minimum
- Not updating minimum length correctly
- Incorrectly increasing count when shrinking window
function minWindow(s: string, t: string): string {
const freqMap = new Map();
for (const ch of t) freqMap.set(ch, (freqMap.get(ch) ?? 0) + 1);
let left = 0, right = 0, count = t.length, minLen = Infinity, start = 0;
while (right < s.length) {
const ch = s[right];
if (freqMap.has(ch)) {
freqMap.set(ch, freqMap.get(ch)! - 1);
if (freqMap.get(ch)! > 0) count--;
}
while (count === 0) {
if (right - left + 1 < minLen) {
minLen = right - left + 1;
start = left;
}
const leftChar = s[left];
if (freqMap.has(leftChar)) {
freqMap.set(leftChar, freqMap.get(leftChar)! + 1);
if (freqMap.get(leftChar)! > 0) count++;
}
left++;
}
right++;
}
return minLen === Infinity ? "" : s.substring(start, start + minLen);
}Solution
Step 1: Identify the condition for decreasing count
The count should decrease when a needed character is found and its frequency is still >= 0, not > 0.Step 2: Fix the condition
Changing from > 0 to >= 0 ensures count decreases correctly when the character frequency reaches zero.Final Answer:
Change condition from if (freqMap.get(ch)! > 0) count--; to if (freqMap.get(ch)! >= 0) count--; -> Option AQuick Check:
Use >= 0 to count chars correctly [OK]
- Using > 0 causes missing valid matches
- Incorrect count initialization
- Removing inner loop breaks shrinking window
s = "aabbccdd" and t = "abc", which of the following substrings is the correct minimum window substring containing all characters of t? Consider that characters can appear multiple times in s but only once in t.Solution
Step 1: Understand character requirements
String t requires one 'a', one 'b', and one 'c'. The substring must contain at least these once.Step 2: Find smallest substring in s containing 'a', 'b', 'c'
"abbc" contains 'a', 'b', 'b', 'c' and is length 4. "abc" does not appear as a contiguous substring in s. "bcca" and "aabbc" are longer substrings.Final Answer:
"abbc" -> Option DQuick Check:
Minimum window substring with all chars = "abbc" [OK]
- Assuming "abc" substring exists exactly
- Ignoring repeated characters in s
- Choosing longer substrings unnecessarily
Ready to prove it?
Pass the test and this pattern moves unknown
