使用动态规划
bool isMatch(std::string s, std::string p) {
std::vector<std::vector<bool>> match(s.length() + 2, std::vector<bool>(p.length() + 2, false));
match[1][1] = s[0] == p[0] || p[0] == '.';
for (int j = 2; j < p.length() + 1; j += 2)
match[0][j] = match[0][j - 2] && p[j - 1] == '*';
for (int i = 1; i < s.length() + 1; i++)
for (int j = 2; j < p.length() + 1; j++)
{
if (p[j - 1] != '*')
match[i][j] = match[i - 1][j - 1] && (s[i - 1] == p[j - 1] || p[j - 1] == '.');
else
match[i][j] = match[i][j - 2] || match[i - 1][j] && (s[i - 1] == p[j - 2] || p[j - 2] == '.');
}
return match[s.length()][p.length()];
}