解法一
class Solution {
public:
bool isMatch(string s, string p) {
int slen = s.size(), plen = p.size();
vector< vector<bool>> dp(slen+1,vector<bool>(plen+1,false));
dp[0][0] = true;
for (int i = 2; i <= plen; i++)
{
dp[0][i] = dp[0][i-2] && p[i-1]=='*';
}
for (int i = 1; i <= slen; i++)
{
for (int j = 1; j <= plen; j++)
{
if (p[j-1]=='*'){
if(dp[i][j-2]) dp[i][j] = true;
else if (dp[i-1][j] && s[i-1] == p[j-2]) dp[i][j]=true;
else if (dp[i-1][j] && p[j-2] == '.') dp[i][j] = true;
}
else{
if(dp[i-1][j-1] && s[i-1]==p[j-1]) dp[i][j] =true;
else if (dp[i-1][j-1] && p[j-1]=='.') dp[i][j] = true;
}
}
}
return dp[slen][plen];
}
};