|
1 | 1 | package s0010_regular_expression_matching; |
2 | 2 |
|
3 | 3 | public class Solution { |
| 4 | + |
| 5 | + Boolean[][] cache; |
| 6 | + |
4 | 7 | public boolean isMatch(String s, String p) { |
5 | | - Boolean[][] dp = new Boolean[s.length() + 1][p.length() + 1]; |
6 | | - return isMatch(s, p, 0, 0, dp); |
| 8 | + cache = new Boolean[s.length() + 1][p.length() + 1]; |
| 9 | + return isMatch(s, p, 0, 0); |
7 | 10 | } |
8 | 11 |
|
9 | | - public boolean isMatch(String s, String p, int i, int j, Boolean[][] dp) { |
10 | | - if (i == s.length() && j == p.length()) { |
11 | | - return true; |
12 | | - } |
| 12 | + public boolean isMatch(String s, String p, int i, int j) { |
13 | 13 | if (j == p.length()) { |
14 | | - return false; |
| 14 | + return i == s.length(); |
15 | 15 | } |
16 | | - if (dp[i][j] != null) { |
17 | | - return dp[i][j]; |
| 16 | + |
| 17 | + boolean result = false; |
| 18 | + |
| 19 | + if (cache[i][j] != null) { |
| 20 | + return cache[i][j]; |
18 | 21 | } |
19 | | - boolean ans = i < s.length() && (s.charAt(i) == p.charAt(j) || p.charAt(j) == '.'); |
20 | | - if (j + 1 < p.length() && p.charAt(j + 1) == '*') { |
21 | | - return dp[i][j] = isMatch(s, p, i, j + 2, dp) || (ans && isMatch(s, p, i + 1, j, dp)); |
| 22 | + |
| 23 | + boolean firstMatch = i < s.length() && (s.charAt(i) == p.charAt(j) || p.charAt(j) == '.'); |
| 24 | + |
| 25 | + if ((j + 1) < p.length() && p.charAt(j + 1) == '*') { |
| 26 | + result = (firstMatch && isMatch(s, p, i + 1, j)) || isMatch(s, p, i, j + 2); |
| 27 | + } else { |
| 28 | + result = firstMatch && isMatch(s, p, i + 1, j + 1); |
22 | 29 | } |
23 | | - return dp[i][j] = ans && isMatch(s, p, i + 1, j + 1, dp); |
| 30 | + return cache[i][j] = result; |
24 | 31 | } |
25 | 32 | } |
0 commit comments