剑指 Offer 19. 正则表达式匹配

题目链接:剑指 Offer 19. 正则表达式匹配

方法:动态规划

解题思路

详情见:逐行详细讲解,由浅入深,dp和递归两种思路

代码

class Solution {
public:
    bool isMatch(string s, string p) {
        int n = s.size(), m = p.size();
        bool f[n + 1][m + 1]; // f[i][j] 代表s的前i个和B的前j个能否匹配
        memset(f, false, sizeof(f));
        for (int i = 0; i <= n; i ++ ) {
            for (int j = 0; j <= m; j ++ ) {
                if (j == 0) {
                    f[i][j] = i == 0;
                } else {
                    if (p[j - 1] != '*') {
                        if (i > 0 && (s[i - 1] == p[j - 1] || p[j - 1] == '.')) {
                            f[i][j] = f[i - 1][j - 1];
                        }
                    } else {
                        if (j >= 2) {
                            f[i][j] |= f[i][j - 2];
                        }
                        if (i >= 1 & j >= 2 && (s[i - 1] == p[j - 2] || p[j - 2] == '.')) {
                            f[i][j] |= f[i - 1][j];
                        }
                    }
                }
            }
        }
        return f[n][m];
    }
};

复杂度分析

时间复杂度:\(O(nm)\)
空间复杂度:\(O(nm)\)

posted @ 2023-04-08 18:18  lixycc  阅读(9)  评论(0)    收藏  举报