From 81737859eb5f24f62149c434d6a5a29147056655 Mon Sep 17 00:00:00 2001 From: Krishnal Ciccolella <26233701+kciccolella@users.noreply.github.com> Date: Thu, 4 Aug 2022 11:25:45 -0400 Subject: [PATCH 1/2] Create 10-Regular-Expression-Matching.js --- javascript/10-Regular-Expression-Matching.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 javascript/10-Regular-Expression-Matching.js diff --git a/javascript/10-Regular-Expression-Matching.js b/javascript/10-Regular-Expression-Matching.js new file mode 100644 index 000000000..2cba81056 --- /dev/null +++ b/javascript/10-Regular-Expression-Matching.js @@ -0,0 +1,8 @@ +/** + * @param {string} s + * @param {string} p + * @return {boolean} + */ +var isMatch = function(s, p) { + return eval("/^"+ p + "$/").test(s); +}; From 71a2bbe7d59fe8983cd3fc389deb5ad2b172f35a Mon Sep 17 00:00:00 2001 From: Krishnal Ciccolella <26233701+kciccolella@users.noreply.github.com> Date: Sat, 6 Aug 2022 10:15:19 -0400 Subject: [PATCH 2/2] Updated 10-Regular-Expression-Matching.js --- javascript/10-Regular-Expression-Matching.js | 31 +++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/javascript/10-Regular-Expression-Matching.js b/javascript/10-Regular-Expression-Matching.js index 2cba81056..093f52033 100644 --- a/javascript/10-Regular-Expression-Matching.js +++ b/javascript/10-Regular-Expression-Matching.js @@ -4,5 +4,34 @@ * @return {boolean} */ var isMatch = function(s, p) { - return eval("/^"+ p + "$/").test(s); + var lenS = s.length; + var lenP = p.length; + var map = {}; + + return check(0, 0); + + function check(idxS, idxP) { + if (map[idxS + ':' + idxP] !== undefined) { + return map[idxS + ':' + idxP]; + } + + if (idxS > lenS) { + return false; + } + + if (idxS === lenS && idxP === lenP) { + return true; + } + + if (p[idxP] === '.' || p[idxP] === s[idxS]) { + map[idxS + ':' + idxP] = p[idxP + 1] === '*' ? + check(idxS + 1, idxP) || check(idxS, idxP + 2) : + check(idxS + 1, idxP + 1); + } else { + map[idxS + ':' + idxP] = p[idxP + 1] === '*' ? + check(idxS, idxP + 2) : false; + } + + return map[idxS + ':' + idxP]; + } };