可以分为以下情况
class Solution {
public:
bool isMatch(string s, string p) {
int s_lenth=s.size(), p_lenth=p.size();
vector<vector<int>> dp(s_lenth+1, vector<int>(p_lenth+1));
dp[0][0]=1;
if(p_lenth) dp[0][1]=0;
for(int i=1;i<p_lenth;i++) //初始化s长度为0时
{
if(p[i]=='*') dp[0][i+1]=dp[0][i-1];
else dp[0][i+1]=0;
}
for(int i=0;i<s_lenth;i++) //初始化p长度为0时
{
dp[i+1][0]=0;
}
for(int i=0;i<s_lenth;i++)
{
for(int j=0;j<p_lenth;j++)
{
if(p[j]=='.')
{
dp[i+1][j+1]=dp[i][j];
}
else if(p[j]=='*')
{
if(p[j-1]=='.')
{
dp[i+1][j+1]=(dp[i][j+1] || dp[i+1][j-1]);
}
else
{
if(s[i]!=p[j-1]) dp[i+1][j+1]=dp[i+1][j-1];
else dp[i+1][j+1]=(dp[i][j+1] || dp[i+1][j-1]);
}
}
else
{
if(s[i]==p[j]) dp[i+1][j+1]=dp[i][j];
else dp[i+1][j+1]=0;
}
}
}
return dp[s_lenth][p_lenth];
}
};