力扣 P44 通配符匹配

Screenshot 2025-10-20 211136.png

今天的题有点难,但是还好,一道动态规划的题目 (线性dp)

因为情况比较多 , s ,p 的下标和 dp 的下标有点混乱。

class Solution {
public:
    bool isMatch(string s, string p) {
        int n = s.size();
        int m = p.size();
        vector<vector<int>> f(n+1,vector<int> (m+1));
        f[0][0] = 1;
        for(int i=1;i<=m;i++){
            if(p[i-1] == '*'){
                f[0][i] = 1;
            }else{
                break;
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(p[j-1] == '*'){
                    f[i][j] = f[i][j-1] | f[i-1][j];
                }else if(p[j-1] == '?' || s[i-1] == p[j-1]){
                    f[i][j] = f[i-1][j-1];
                }
            }
        }
        return f[n][m];
    }
};

Screenshot 2025-10-20 213210.png

f ( i, j ) 表示 s 的前 i 个, 与 p 的前 j 个是否匹配

明天见 !

迷茫java练习生