递归方法运行时间过长。考虑使用动态规划的方法。
代码如下:
bool isMatch(string s, string p) { int i,j; int m=s.size(); int n=p.size(); bool b[m + 1][n + 1]; // b[i][j]表示s[i-1]和p[j-1]的匹配结果 b[0][0] = true; for (i = 0; i < m; i++) { b[i + 1][0] = false; } for (j = 0; j < n; j++) { b[0][j + 1] = j > 0 && '*' == p[j] && b[0][j - 1]; } for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { if (p[j] != '*') { b[i + 1][j + 1] = b[i][j] && ('.' == p[j] || s[i] == p[j]); //表达式中的b[i][j]的意思是:s[i-1]已经和p[j-1]匹配。下同。 } else { b[i + 1][j + 1] = b[i + 1][j - 1] && j > 0 || b[i + 1][j] || b[i][j + 1] && j > 0 && ('.' == p[j - 1] || s[i] == p[j - 1]); //别分为*之前的字符匹配零次、一次、多次 } } } return b[m][n]; }