g0001_0100.s0010_regular_expression_matching.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java Show documentation
Show all versions of leetcode-in-java Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0001_0100.s0010_regular_expression_matching;
// #Hard #Top_100_Liked_Questions #Top_Interview_Questions #String #Dynamic_Programming #Recursion
// #Udemy_Dynamic_Programming #Big_O_Time_O(m*n)_Space_O(m*n)
// #2023_08_09_Time_1_ms_(100.00%)_Space_41.1_MB_(61.00%)
public class Solution {
private Boolean[][] cache;
public boolean isMatch(String s, String p) {
cache = new Boolean[s.length() + 1][p.length() + 1];
return isMatch(s, p, 0, 0);
}
private boolean isMatch(String s, String p, int i, int j) {
if (j == p.length()) {
return i == s.length();
}
boolean result;
if (cache[i][j] != null) {
return cache[i][j];
}
boolean firstMatch = i < s.length() && (s.charAt(i) == p.charAt(j) || p.charAt(j) == '.');
if ((j + 1) < p.length() && p.charAt(j + 1) == '*') {
result = (firstMatch && isMatch(s, p, i + 1, j)) || isMatch(s, p, i, j + 2);
} else {
result = firstMatch && isMatch(s, p, i + 1, j + 1);
}
cache[i][j] = result;
return result;
}
}