class Solution { public: /* 把能确定的都确定下来,(能确定的一般都是只能满足一种迭代方程的,或者不再迭代方程定义域内的) */ bool match(string str, string pat) { int n = str.size(), m = pat.size(); vector<vector<bool>> dp(n+1,vector<bool>(m+1,false)); dp[0][0] = true; for(int j = 2; j <= m; j++){ // 当 str 为空串时,只能是0次 if(pat[j-1] == '*') dp[0][j] = dp[0][j-2]; } for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ if(pat[j-1] == '.' || pat[j-1] == str[i-1]){ dp[i][j] = dp[i-1][j-1]; }else if(j >= 2 && pat[j-1] == '*'){ if(pat[j-2] == '.' || str[i-1] == pat[j-2]){ // 能进行匹配可有 0 次 1 次 或 多次! dp[i][j] = dp[i][j-2] || dp[i-1][j-2] || dp[i-1][j]; }else { // 不匹配,只能是 0 次! dp[i][j] = dp[i][j-2]; } } } } return dp[n][m]; } };