44. 通配符匹配

  1. 题目链接

  2. 思路和之前一个题类似,链接

  3. 代码

    class Solution {
    public:
    
        bool process(string &s, string &p, int i, int j, vector<vector<int>> &dp) {
            if (i == s.length() && j == p.length()) {
                return true;
            }
            if (i == s.length()) {
                if (p[j] == '*') {
                    dp[i][j] =  process(s, p, i, j + 1, dp);
                    return dp[i][j];
                }
                dp[i][j] = false;
                return false;
                
            }
            if (j == p.length()) {
                return false;
            }
            if (dp[i][j] != -1) {
                return dp[i][j];
            }
            if (p[j] == '?' || s[i] == p[j]) {     // 匹配一个
                dp[i][j] = process(s, p, i + 1, j + 1, dp);
                return dp[i][j];
            }
            if (p[j] == '*') {
                bool next = process(s, p, i, j + 1, dp);    // 匹配0个
                if (next) {   // 成功了就不用往下了
                    dp[i][j] = true;
                    return true;
                }
                dp[i][j] = process(s, p, i + 1, j, dp);     // 匹配多个
                return dp[i][j];
            }
            // 不相等,匹配不了
            dp[i][j] = false;
            return false;
    
        }
    
        bool isMatch(string s, string p) {
            int n1 = s.length();
            int n2 = p.length();
            vector<vector<int>> dp(n1 + 1, vector<int>(n2 + 1, -1));
            return process(s, p, 0, 0, dp);
        }
    };
    
posted @ 2024-12-19 11:02  ouyangxx  阅读(21)  评论(0)    收藏  举报