Skip to content

Commit 8661dd3

Browse files
committed
Added minimum window substring implementation and test file
1 parent 08d8c6b commit 8661dd3

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* Author: Mayank
3+
* Minimum Window Substring implementation in JavaScript
4+
* Finds the smallest substring of s that contains all characters of t.
5+
*/
6+
7+
function minWindowSubstring(s, t) {
8+
if (t.length > s.length) return ""
9+
10+
const need = {}
11+
for (let char of t) {
12+
need[char] = (need[char] || 0) + 1
13+
}
14+
15+
let left = 0
16+
let count = t.length
17+
let minLen = Infinity
18+
let minStart = 0
19+
20+
for (let right = 0; right < s.length; right++) {
21+
if (need[s[right]] !== undefined) {
22+
if (need[s[right]] > 0) count--
23+
need[s[right]]--
24+
}
25+
26+
while (count === 0) {
27+
if (right - left + 1 < minLen) {
28+
minLen = right - left + 1
29+
minStart = left
30+
}
31+
if (need[s[left]] !== undefined) {
32+
need[s[left]]++
33+
if (need[s[left]] > 0) count++
34+
}
35+
left++
36+
}
37+
}
38+
39+
return minLen === Infinity ? "" : s.substring(minStart, minStart + minLen)
40+
}
41+
42+
export { minWindowSubstring }
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* Test file for Minimum Window Substring
3+
*/
4+
5+
import { minWindowSubstring } from "../MinimumWindowSubstring.js"
6+
7+
test("return smallest window containing all characters", () => {
8+
expect(minWindowSubstring("ADOBECODEBANC", "ABC")).toBe("BANC")
9+
})
10+
11+
test("return empty string if no window found", () => {
12+
expect(minWindowSubstring("HELLO", "XYZ")).toBe("")
13+
})
14+
15+
test("return full string if it matches exactly", () => {
16+
expect(minWindowSubstring("ABC", "ABC")).toBe("ABC")
17+
})

0 commit comments

Comments
 (0)