力扣 P44 通配符匹配

今天的题有点难,但是还好,一道动态规划的题目 (线性dp)
因为情况比较多 , s ,p 的下标和 dp 的下标有点混乱。
class Solution {
public:
bool isMatch(string s, string p) {
int n = s.size();
int m = p.size();
vector<vector<int>> f(n+1,vector<int> (m+1));
f[0][0] = 1;
for(int i=1;i<=m;i++){
if(p[i-1] == '*'){
f[0][i] = 1;
}else{
break;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(p[j-1] == '*'){
f[i][j] = f[i][j-1] | f[i-1][j];
}else if(p[j-1] == '?' || s[i-1] == p[j-1]){
f[i][j] = f[i-1][j-1];
}
}
}
return f[n][m];
}
};

f ( i, j ) 表示 s 的前 i 个, 与 p 的前 j 个是否匹配