母题
https://blog.csdn.net/qq_52934831/article/details/121293184?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163789035616780269829723%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163789035616780269829723&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v29-1-121293184.pc_v2_rank_blog_default&utm_term=%E5%8C%B9%E9%85%8D
地址
https://leetcode-cn.com/problems/wildcard-matching/
描述
思想
dp问题当我们需要使用i-1时,为了避免特判需要在字符串前面+’ ',让下标从1开始
代码
class Solution {
public:
bool isMatch(string s, string p) {
int n=s.length(),m=p.length();
s=' '+s,p=' '+p;
vector<vector<bool>> f(n+1,vector<bool>(m+1));
f[0][0]=true;
for(int i=0;i<=n;i++){
for(int j=1;j<=m;j++){
if(p[j]=='*'){
f[i][j]=f[i][j-1]||i&&f[i-1][j];
}
else {
//注意这里&&的顺序也很重要:i要在f[i-1][j-1]前面,不然会报错。
f[i][j]= (s[i]==p[j]||p[j]=='?')&& i&& f[i-1][j-1];
}
}
}
return f[n][m];
}
};