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)