1
var findMaxForm = function (strs, m, n) {
2
const countZerosAndOne = strs.map((str) => {
3
let z = 0,
4
o = 0;
5
str.split("").forEach((c) => (c == "0" ? z++ : o++));
6
return [z, o];
7
});
8
const len = strs.length;
9

10
const dp = new Map();
11
const knapsack = (i, m, n) => {
12
if (i == len) return 0;
13

14
const key = i + "#" + m + "#" + n;
15

16
if (dp.has(key)) return dp.get(key);
17

18
let pick = 0;
19

20
const [rz, ro] = countZerosAndOne[i];
21

22
if (m >= rz && n >= ro) pick = knapsack(i + 1, m - rz, n - ro) + 1;
23

24
// drop check
25
let drop = knapsack(i + 1, m, n);
26

27
const op = Math.max(drop, pick);
28
dp.set(key, op);
29
return op;
30
};
31
return knapsack(0, m, n);
32
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0