class Solution {
public:
bool isMatch(string s, string p) {
int m = s.size();
int n = p.size();
auto matches = [&](int i, int j) {
if (i == 0) {
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];
}
};
这是力扣上的官方答案,希望来个认真负责的大佬回答我几个问题
问:auto matches = [&](int i, int j)可以更改为auto matches(int i,int j)吗,为什么
问: return s[i - 1] == p[j - 1]; s[i - 1]和p[j - 1]万一不相等怎么办,强制让他等于*吗
问: f[i][j] |= f[i - 1][j];按位或在二维数组中有什么用呢,能将详细点吗,他会直接改变f[i][j] 中的数值吗
问:f[i][j]数组里面是什么呢,truefalse还是s,p;如果是s,p为什么return后是turnfalse
问:我看别的数组的第一位是从0开始的int i=0;i<n。而这个f[i][j]是从1开始的,0只是他的边界值f[0][0] = true;