1. class Solution {
    2. string s;
    3. string p;
    4. vector<vector<int>> f;
    5. bool dfs(int sidx, int pidx)
    6. {
    7. if(f[sidx][pidx] != -1)
    8. return f[sidx][pidx];
    9. if(pidx == p.size())
    10. return f[sidx][pidx] = sidx == s.size();
    11. bool res1 = (sidx < s.size() && pidx < p.size() && (s[sidx] == p[pidx] || p[pidx] == '.'));
    12. bool res2;
    13. if(pidx + 1 < p.size() && p[pidx + 1] == '*')
    14. {
    15. bool a = dfs(sidx, pidx + 2);
    16. bool b = res1 && dfs(sidx + 1, pidx);
    17. res2 = a || b ;
    18. }
    19. else
    20. {
    21. res2 = res1 && dfs(sidx + 1, pidx + 1);
    22. }
    23. return f[sidx][pidx] = res2;
    24. }
    25. public:
    26. bool isMatch(string _s, string _p) {
    27. s = _s;
    28. p = _p;
    29. if(!s.size() && !p.size()) return true;//都没有可以
    30. f = vector<vector<int>>(s.size() + 1, vector<int>(p.size() + 1, -1));
    31. return dfs(0, 0);
    32. }
    33. };

    第二次写题代码
    要注意的是,没有f来存储之前已经得到的数据就会造成内存超出限制

    1. class Solution {
    2. vector<vector<int>> f;
    3. bool dfs(string s, string p, int sidx, int pidx)
    4. {
    5. if(sidx <= s.size() && pidx <= p.size() && f[sidx][pidx] != -1) return f[sidx][pidx];
    6. if(pidx == p.size())
    7. return sidx == s.size();
    8. bool a = sidx < s.size() && (s[sidx] == p[pidx] || p[pidx] == '.');
    9. if(pidx + 1 < p.size() && p[pidx + 1] == '*')
    10. {
    11. return f[sidx][pidx] = a && dfs(s, p, sidx + 1, pidx) || dfs(s, p, sidx, pidx + 2);
    12. }
    13. return f[sidx][pidx] = a && dfs(s, p, sidx + 1, pidx + 1);
    14. }
    15. public:
    16. bool isMatch(string s, string p) {
    17. f = vector<vector<int>>(s.size() + 1, vector<int>(p.size() + 1, -1));
    18. return dfs(s, p , 0 , 0);
    19. }
    20. };