Back to DSA
Wildcard Matching
hardImplement a pattern matcher where '?' stands for any single character and '*' stands for any sequence of characters (including none). The entire input string must be matched by the pattern.
Examples
Example 1:
Input:
s = "sequence", p = "s*nce"Output:
trueExplanation: '*' absorbs 'eque', and the remaining characters match literally.
Example 2:
Input:
s = "test", p = "te?a"Output:
falseExplanation: '?' matches 's' but 'a' does not match 't'.
Hints
class Solution {
public boolean isMatch(String s, String p) {
int m = s.length(), n = p.length();
boolean[][] dp = new boolean[m + 1][n + 1];
dp[0][0] = true;
for (int j = 1; j <= n; j++) {
if (p.charAt(j - 1) == '*') dp[0][j] = dp[0][j - 1];
}
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (p.charAt(j - 1) == '*') {
dp[i][j] = dp[i - 1][j] || dp[i][j - 1];
} else if (p.charAt(j - 1) == '?' || s.charAt(i - 1) == p.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1];
}
}
}
return dp[m][n];
}
}Time complexity
O(m * n)Space complexity
O(m * n)