class Solution {
public:
bool isMatch(string s, string p) {
if(p.empty()) return s.empty();
int m=s.size()+1;
int n=p.size()+1;
vector<vector<bool>> dp(m,vector<bool>(n,false));
dp[0][0]=true;
//dp[0][1]=false;
for(int i=2;i<n;i++){
int j=i-1;
if(p[j]=='*')
dp[0][i]=dp[0][i-2];
}
for(int i=1;i<m;i++){
int a=i-1;
for(int j=1;j<n;j++){
int b=j-1;
if(s[a]==p[b] || p[b]=='.' )
dp[i][j]=dp[i-1][j-1];
else if(p[b]=='*'){
if(p[b-1]==s[a] || p[b-1]=='.')
dp[i][j]=dp[i][j-2]||dp[i-1][j];
else
dp[i][j]=dp[i][j-2];
}
}
}
return dp[m-1][n-1];
}
};