先上代码
class Solution {
public:
bool isMatch(string s, string p) {
int n=s.size(),m=p.size();
s=' '+s,p=' '+p;
vector<vector<bool>>f(n+1,vector<bool>(m+1,false));
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
{
if(!i&&!j) f[i][j]=true;
else
{
if(j+1<=m&&p[j+1]=='*') continue;
else
{
if(p[j]!='*')
{
if(s[i]==p[j]||p[j]=='.')
{
if(j&&i)
f[i][j]=f[i-1][j-1];
}
}
else
{
if(j>1) f[i][j]=f[i][j-2];
if(i&&j)
{
if(f[i-1][j]&&(s[i]==p[j-1]||p[j-1]=='.'))
f[i][j]=true;
}
}
}
}
}
return f[n][m];
}
};
这里面比较难推导的是这一块代码
if(j>1) f[i][j]=f[i][j-2];
if(i&&j)
{
if(f[i-1][j]&&(s[i]==p[j-1]||p[j-1]=='.'))
f[i][j]=true;
}