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 @   ouyangxx  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示