虽然做过 但还是难
参考10. Regular Expression Matching
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public: bool isMatch(string s, string p) { vector<vector<bool>> dp(s.size() + 1, vector<bool>(p.size() + 1, false)); dp.back().back() = true; for(int i = s.size(); i >= 0; --i) { for(int j = p.size() - 1; j >= 0; --j) { bool firstMatch = i < s.size() && (s[i] == p[j] || p[j] == '.'); if(j <= p.size() - 2 && p[j + 1] == '*') dp[i][j] = dp[i][j + 2] || (firstMatch && dp[i + 1][j]); else dp[i][j] = firstMatch && dp[i + 1][j + 1]; } } return dp[0][0]; } };
|