44. 通配符匹配(LeetCode困难)(DP)

44. 通配符匹配

f[0][j]可能会匹配,而f[i][0]一定不匹配,所以i从0开始,而j从1开始即可

class Solution {
public:
    bool isMatch(string s, string p) {
        int n = s.size(), m = p.size();
        s = ' ' + s, p = ' ' + p;
        vector<vector<bool>> f(n + 1, vector<bool>(m + 1, 0));
        f[0][0] = true;
        
        for(int i = 0; i <= n; ++i){
            for(int j = 1; j <= m; ++j){
                if(p[j] == '*'){
                    f[i][j] = f[i][j-1] || i && f[i-1][j];
                }else {
                    f[i][j] = i && f[i-1][j-1] && (s[i] == p[j] || p[j] == '?');
                }
            }
        }
    
        return f[n][m];
    }
};
posted @ 2025-03-13 16:14  awei040519  阅读(16)  评论(0)    收藏  举报