| 63 | ); /* Time O(M) | Space O(M) */ |
| 64 | |
| 65 | var check = (text, pattern, row, col, memo) => { |
| 66 | const isTextDefined = row < text.length, |
| 67 | isTextAndPatternEqual = pattern[col] === text[row], |
| 68 | isPatternPeriod = pattern[col] === '.', |
| 69 | isFirstMatch = |
| 70 | isTextDefined && (isTextAndPatternEqual || isPatternPeriod), |
| 71 | isNextPatternWildCard = |
| 72 | col + 1 < pattern.length && pattern[col + 1] === '*'; |
| 73 | |
| 74 | return isNextPatternWildCard /* Time O(N * M) | Space O(N * M) */ |
| 75 | ? isMatch(text, pattern, row, col + 2, memo) || |
| 76 | (isFirstMatch && isMatch(text, pattern, row + 1, col, memo)) |
| 77 | : isFirstMatch && isMatch(text, pattern, row + 1, col + 1, memo); |
| 78 | }; |
| 79 | |
| 80 | /** |
| 81 | * Time O(N * M) | Space O(N * M) |