diff --git a/src/leecode/.DS_Store b/src/leecode/.DS_Store new file mode 100644 index 0000000..43e12fb Binary files /dev/null and b/src/leecode/.DS_Store differ diff --git a/src/leecode/javascript/44.通配符匹配.js b/src/leecode/javascript/44.通配符匹配.js new file mode 100644 index 0000000..5b5062c --- /dev/null +++ b/src/leecode/javascript/44.通配符匹配.js @@ -0,0 +1,42 @@ +/* + * @lc app=leetcode.cn id=44 lang=javascript + * + * [44] 通配符匹配 + */ + +// @lc code=start +/** + * @param {string} s + * @param {string} p + * @return {boolean} + */ +var isMatch = function (s, p) { + const cache = {}; + return dp(0, 0, s, p, cache); +}; + +var dp = (si, pi, s, p, cache) => { + const key = `${si}:${pi}`; + if (key in cache) { + return cache[key]; + } + if (si == s.length) { + //空字符串匹配剩余全部是*的情况 + return pi >= p.length || (p.charAt(pi) == '*' && dp(si, pi + 1, s, p, cache)); + } + if (pi >= p.length) { + cache[key] = false; + return false; + } + const sVal = s.charAt(si); + const pVal = p.charAt(pi); + let ret = false; + if (pVal == '?' || pVal == sVal) { + ret = dp(si + 1, pi + 1, s, p, cache); + } else if (pVal == '*') { + ret = dp(si + 1, pi + 1, s, p, cache) || dp(si + 1, pi, s, p, cache) || dp(si, pi + 1, s, p, cache); + } + cache[key] = ret; + return ret; +}; +// @lc code=end