//代码参考力扣官方解答
class Solution {
public:
bool isMatch(string s, string p) {
int length1 = s.length(), length2 = p.length();
vector<vector<int>> f(length1 + 1, vector<int>(length2 + 1));
f[0][0] = 1, f[0][1] = 0;
int i = 0, flag = 0, j = 0;
auto matches = [&](int i, int j) {
if (i == 0)
return false;
else if (p[j] == '.')
return true;
return s[i - 1] == p[j];
};
for (int i = 0; i <= length1; i++) {
for (int j = 1; j <= length2 ; j++) {
if (p[j - 1] == '*') {
if (matches(i, j - 2))
f[i][j] = f[i - 1][j];//匹配则看上一个*号匹不匹配
f[i][j] |= f[i][j - 2];//不匹配则往前倒两个
}
else {
if (matches(i, j - 1))
f[i][j] = f[i - 1][j - 1];//往前倒两个
}
}
}
return f[length1][length2];
}
};
09-18
186
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交