Sponsored
Sponsored
The dynamic programming approach uses a 2D table to store results of subproblems. We define dp[i][j] as True if the first i characters in the string s can be matched by the first j characters of the pattern p.
Base Cases:
Fill the table using the following rules:
Time Complexity: O(m*n) where m and n are the lengths of s and p, respectively.
Space Complexity: O(m*n) due to the storage of the dp table.
1#include <vector>
2#include <string>
3using namespace std;
4
5class Solution {
6public:
7 bool isMatch(string s, string p) {
8 int m = s.size();
9 int n = p.size();
10 vector<vector<bool>> dp(m + 1, vector<bool>(n + 1, false));
11 dp[0][0] = true;
12 for (int j = 1; j <= n; j++) {
13 if (p[j - 1] == '*')
14 dp[0][j] = dp[0][j - 1];
}
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (p[j - 1] == '*') {
dp[i][j] = dp[i - 1][j] || dp[i][j - 1];
} else {
dp[i][j] = dp[i - 1][j - 1] && (p[j - 1] == '?' || s[i - 1] == p[j - 1]);
}
}
}
return dp[m][n];
}
};
This solution employs a 2D vector to achieve the same logic as the C solution. The transition occurs based on characters at pattern and text positions, following similar logic for '*' and '?' as the C implementation.
The greedy algorithm approach tracks the position of the last '*' in the pattern and attempts to match remaining characters greedily. We maintain two pointers, one for the string and one for the pattern. When encountering '*', we remember the positions of both pointers in order to backtrack if needed.
If characters in p and s match or if the pattern has '?', both pointers are incremented. For '*', we shift the pattern pointer and remember indices for future potential matches. If there's a mismatch after '*', we use these remembered indices to backtrack.
Time Complexity: O(m + n) due to possible backtracking
Space Complexity: O(1) requiring constant storage for indices.
The JavaScript approach connects string elements with pattern allowance, applying memorization of prior star uses to navigate challenging segments via controlled backtracking.