44.通配符匹配

算法

  1. 集合:所有S[1~i]和P[1~j]的匹配方案
  2. 属性:是否存在一个合法方案(bool)
  3. 如果p[j] != '*',dp[i][j] = dp[i-1][j-1] && (s[i]==p[j] || p[j]=='?')
  4. 如果p[j] == '*',dp[i][j] = dp[i][j - 1] || dp[i-1][j-1] || dp[i-2][j-1] || dp[i-3][j-1]...

代码

class Solution {
public:
    bool isMatch(string s, string p) {
        s = ' ' + s, p = ' ' + p;
        int n = s.size(), m = p.size();
        vector<vector<bool>> dp(n, vector<bool>(m));
        dp[0][0] = true;
        for(int i = 0; i < n; i++)
            for(int j = 1; j < m; j++)
            {
                char ch = p[j];
                if(ch != '*')
                {
                    if(i && (s[i] == ch || ch == '?'))
                        dp[i][j] = dp[i - 1][j - 1];
                }
                else
                {
                    dp[i][j] = dp[i][j - 1];
                    if(i) dp[i][j] = dp[i][j] || dp[i - 1][j];
                }
            }
        return dp[n - 1][m - 1];
    }
};
posted @ 2022-11-16 13:22  INnoVation-V2  阅读(18)  评论(0编辑  收藏  举报