Skip to content

Commit 4f0d0b1

Browse files
committed
Added Python solution to 'Minimum Window Substring'
1 parent fe08655 commit 4f0d0b1

File tree

1 file changed

+43
-29
lines changed

1 file changed

+43
-29
lines changed
Lines changed: 43 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,43 @@
1-
class Solution:
2-
def minWindow(self, s: str, t: str) -> str:
3-
tcounter = defaultdict(int)
4-
for c in t:
5-
tcounter[c] += 1
6-
7-
start = 0
8-
scounter = defaultdict(int)
9-
ml = ''
10-
win = False
11-
for i, c in enumerate(s):
12-
scounter[c] += 1
13-
14-
if not win:
15-
win = True
16-
for k, v in tcounter.items():
17-
if scounter[k] < v:
18-
win = False
19-
break
20-
21-
if win:
22-
while scounter[s[start]] - 1 >= tcounter[s[start]]:
23-
scounter[s[start]] -= 1
24-
start += 1
25-
26-
if not ml or i - start + 1 < len(ml):
27-
ml = s[start:i+1]
28-
29-
return ml
1+
# Added on 2022-08-18 15:51:55.963915
2+
3+
var minWindow = function(s, t) {
4+
const tf = {}, sf = {};
5+
for(let c of t) {
6+
tf[c] = (tf[c] || 0) + 1;
7+
}
8+
let l = 0, r = 0, rs = t.length;
9+
let ml = -1, mr = -1;
10+
for(; r < s.length; r++) {
11+
const c = s[r];
12+
13+
if(!tf[c]) continue;
14+
15+
const sc = sf[c] || 0;
16+
sf[c] = sc + 1;
17+
if(sf[c] <= tf[c]) {
18+
rs--;
19+
}
20+
21+
if(rs == 0) {
22+
while(true) {
23+
if(mr == -1 || mr - ml > r - l) {
24+
[mr, ml] = [r, l];
25+
}
26+
27+
const c = s[l];
28+
if(!tf[c]) {
29+
l++;
30+
}
31+
else if(sf[c] - 1 < tf[c]) {
32+
sf[c]--, l++, rs++;
33+
break;
34+
} else {
35+
sf[c]--;
36+
l++;
37+
}
38+
}
39+
}
40+
}
41+
if(mr == -1) return '';
42+
return s.slice(ml, mr + 1);
43+
};

0 commit comments

Comments
 (0)