1
var isMatch = function (s, p) {
2
const slen = s.length,
3
plen = p.length;
4
const dp = new Map();
5

6
const solve = (si = 0, pi = 0) => {
7
// both are compared and are equal till end
8
if (si == slen && pi == plen) return true;
9
// we have consumed are wildcard string and still s is remaining
10
if (pi == plen) return false;
11
// we still have wildcard characters remaining
12
if (si == slen) {
13
while (p[pi] == "*") pi++;
14
return pi == plen;
15
}
16

17
const key = [si, pi].join(":");
18
if (dp.has(key)) return dp.get(key);
19

20
let ans = false;
21
if (p[pi] == "*") {
22
// drop * or use it
23
ans = solve(si, pi + 1) || solve(si + 1, pi);
24
} else {
25
const match = s[si] == p[pi] || p[pi] == "?";
26
if (match) ans = solve(si + 1, pi + 1);
27
}
28

29
dp.set(key, ans);
30

31
return ans;
32
};
33
return solve();
34
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0