class Solution { public: bool match(string str, string pattern) { vector<vector<bool>>dp(str.length()+10,vector<bool>(pattern.length()+10,false)); dp[0][0]=true; for(int i=1;i<=pattern.length();i++)if(pattern[i-1]=='*')dp[i][0]=dp[i-2][0]; for(int i=1;i<=pattern.length();i++) for(int j=1;j<=str.length();j++) { if(pattern[i-1]=='*') { if(pattern[i-2]=='.')dp[i][j]=true; else if(pattern[i-2]==str[j-1])dp[i][j]=dp[i-1][j]||dp[i-1][j-1]||dp[i-2][j]; else dp[i][j]=dp[i-2][j]; } else if(pattern[i-1]=='.'||str[j-1]==pattern[i-1]) dp[i][j]=dp[i-1][j-1]; } return dp[pattern.length()][str.length()]; } };