class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
/* s的第i个字符是否与p的第j个字符是否匹配,从零开始,判断s[i-1] ?= p[j-1] */
bool isMatch(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];
}
/* 使用动态规划求解 */
bool match(string str, string pattern) {
int m = str.size();
int n = pattern.size();
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 (pattern[j - 1] == '*') {
f[i][j] |= f[i][j - 2];
if (isMatch(str, pattern, i, j - 1)) {
f[i][j] |= f[i - 1][j];
}
} else {
if (isMatch(str, pattern, i, j)) {
f[i][j] |= f[i - 1][j - 1];
}
}
}
}
return f[m][n];
}
};