给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。
'?' 可以匹配任何单个字符。
'*' 可以匹配任意字符串(包括空字符串)。
两个字符串完全匹配才算匹配成功。
代码:
class Solution {
public:
bool isMatch(string s, string p) {
int n=s.size(),m=p.size();
s='0'+s,p='0'+p;
vector<vector<bool>> f(n+1,vector<bool>(m+1));
f[0][0]=true;//加了 ‘ ’
//加了 ‘ ’ 不一定是不匹配的 "aa" "*"
//for(int i=0;i<n;i++) f[i][0]=false;
//f[0][i]可能是有意义的 比如s ‘’ p *
//但是 f[i][0] 一定是没有意义的 p[0]=' '
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{
f[i][j]=(s[i] == p[j] || p[j] == '?') &&(i && f[i-1][j-1]);
}
}
}
return f[n][m];
}
};
评论区