leetcode10 正則表示式匹配
阿新 • • 發佈:2022-03-26
思路:
動態規劃。
實現:
1 class Solution 2 { 3 public: 4 bool dfs(string& s, string& p, int x, int y, vector<vector<int>>& dp) 5 { 6 int n = s.length(), m = p.length(); 7 if (x == n) 8 { 9 bool res = false; 10 if (y == m) res = true; 11 else 12 { 13 if (dp[x][y] != -1) return dp[x][y]; 14 if (y + 1 < m and p[y + 1] == '*') res = dfs(s, p, x, y + 2, dp); 15 else res = false; 16 } 17 return dp[x][y] = res; 18 } 19 if(y == m) return x == n; 20 if (dp[x][y] != -1) return dp[x][y]; 21 bool res = false; 22 if (s[x] == p[y]) 23 { 24 if (y + 1 < m and p[y + 1] == '*') 25 { 26 res = dfs(s, p, x, y + 2, dp) or dfs(s, p, x + 1, y + 2, dp) or dfs(s, p, x + 1, y, dp); 27 } 28 else 29 { 30 res = dfs(s, p, x + 1, y + 1, dp); 31 } 32 } 33 else if (p[y] == '.') 34 { 35 if (y + 1 < m and p[y + 1] == '*') 36 { 37 res = dfs(s, p, x, y + 2, dp) or dfs(s, p, x + 1, y + 2, dp) or dfs(s, p, x + 1, y, dp); 38 } 39 else res = dfs(s, p, x + 1, y + 1, dp); 40 } 41 else if (y + 1 < m and p[y + 1] == '*') res = dfs(s, p, x, y + 2, dp); 42 return dp[x][y] = res; 43 } 44 bool isMatch(string s, string p) 45 { 46 int n = s.length(), m = p.length(); 47 vector<vector<int>> dp(n + 1, vector<int>(m + 1, -1)); 48 return dfs(s, p, 0, 0, dp); 49 } 50 };