class Solution {string s;string p;vector<vector<int>> f;bool dfs(int sidx, int pidx){if(f[sidx][pidx] != -1)return f[sidx][pidx];if(pidx == p.size())return f[sidx][pidx] = sidx == s.size();bool res1 = (sidx < s.size() && pidx < p.size() && (s[sidx] == p[pidx] || p[pidx] == '.'));bool res2;if(pidx + 1 < p.size() && p[pidx + 1] == '*'){bool a = dfs(sidx, pidx + 2);bool b = res1 && dfs(sidx + 1, pidx);res2 = a || b ;}else{res2 = res1 && dfs(sidx + 1, pidx + 1);}return f[sidx][pidx] = res2;}public:bool isMatch(string _s, string _p) {s = _s;p = _p;if(!s.size() && !p.size()) return true;//都没有可以f = vector<vector<int>>(s.size() + 1, vector<int>(p.size() + 1, -1));return dfs(0, 0);}};
第二次写题代码
要注意的是,没有f来存储之前已经得到的数据就会造成内存超出限制
class Solution {vector<vector<int>> f;bool dfs(string s, string p, int sidx, int pidx){if(sidx <= s.size() && pidx <= p.size() && f[sidx][pidx] != -1) return f[sidx][pidx];if(pidx == p.size())return sidx == s.size();bool a = sidx < s.size() && (s[sidx] == p[pidx] || p[pidx] == '.');if(pidx + 1 < p.size() && p[pidx + 1] == '*'){return f[sidx][pidx] = a && dfs(s, p, sidx + 1, pidx) || dfs(s, p, sidx, pidx + 2);}return f[sidx][pidx] = a && dfs(s, p, sidx + 1, pidx + 1);}public:bool isMatch(string s, string p) {f = vector<vector<int>>(s.size() + 1, vector<int>(p.size() + 1, -1));return dfs(s, p , 0 , 0);}};
