Leetcode 10. 正则表达式匹配
题目描述:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。
- ‘.’ 匹配任意单个字符
- ‘*’ 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。
代码用的动态规划,但完全参照答案,答案解析看的差不多理解,但这道题对目前的自己来说确实有难度,动态规划的各种类型接下来找时间都得学一学,不然还是差很多的。再此记录一下吧。
代码:
class Solution {
public:
bool isMatch(string s, string p) {
int m = s.size(), n = p.size();
auto matches = [&](int i, int j) {
if (0 == i) {
return false;
}
if ('.' == p[j - 1]) {
return true;
}
return s[i - 1] == p[j - 1];
};
vector<vector<int> > f(m + 1, vector<int>(n + 1));
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];
if (matches(i, j - 1)) {
f[i][j] |= f[i - 1][j];
}
}
else {
if (matches(i, j)) {
f[i][j] |= f[i - 1][j - 1];
}
}
}
}
return f[m][n];
}
};