LeetCode 热题 100 总结——正则表达式匹配

55 阅读1分钟
public:
    bool isMatch(string s, string p) {
        int m = s.length();
        int n = p.length();

        // 创建二维布尔矩阵,用于存储匹配结果
        vector<vector<bool>> f(m + 1, vector<bool>(n + 1, false));
        f[0][0] = true;

        // 动态规划遍历匹配
        for (int i = 0; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                if (p[j - 1] == '*') {
                    // 处理 '*' 的情况
                    f[i][j] = f[i][j - 2]; // '*' 匹配 0 次的情况
                    if (matches(s, p, i, j - 1)) {
                        f[i][j] = f[i][j] || f[i - 1][j]; // '*' 匹配多次的情况
                    }
                } else {
                    // 处理非 '*' 的情况
                    if (matches(s, p, i, j)) {
                        f[i][j] = f[i - 1][j - 1];
                    }
                }
            }
        }

        return f[m][n]; // 返回最终匹配结果
    }

    bool matches(string s, string p, int i, int j) {
        if (i == 0) {
            return false;
        }
        if (p[j - 1] == '.') {
            return true;
        }
        return s[i - 1] == p[j - 1];
    }
};

参考链接:leetcode10. 正则表达式匹配 - 知乎 (zhihu.com)