题目传送门
AC-Code
#include <regex>
class Solution {
public:
bool match(char* str, char* pattern) {
if(str == NULL || pattern == NULL) return false;
return ans3(str, pattern);
}
bool ans1(char* str, char* pattern) {
regex reg(pattern);
return regex_match(str, reg);
}
bool ans2(char* s, char* p) {
if(*s == '\0' && *p == '\0') return true;
if(*p == '\0') return false;
if (*(p + 1) != '*') {
if (*s != '\0' && (*s == *p || *p == '.'))
return match(s + 1, p + 1);
else
return false;
}
else {
bool ret = false;
if (*s != '\0' && (*s == *p || *p == '.'))
ret = match(s + 1, p);
return ret || match(s, p + 2);
}
}
bool ans3(char* s, char* p) {
int sn = strlen(s), pn = strlen(p);
vector<vector<bool>> f(sn + 1, vector<bool>(pn + 1, 0));
for (int i = 0; i <= sn; ++i) {
for (int j = 0; j <= pn; ++j) {
if (j == 0) f[i][j] = (i == 0);
else {
if (p[j - 1] != '*') {
if (i >= 1 && (s[i - 1] == p[j - 1] || p[j - 1] == '.'))
f[i][j] = f[i - 1][j - 1];
}
else {
if (j >= 2)
f[i][j] = f[i][j - 2] ? f[i][j - 2] : f[i][j];
if (i >= 1 && j >= 2 && (s[i - 1] == p[j - 2] || p[j - 2] == '.'))
f[i][j] = f[i - 1][j] ? f[i - 1][j] : f[i][j];
}
}
}
}
return f[sn][pn];
}
};