动态规划:
public boolean isMatch(String s, String p) {
int m = s.length();
int n = p.length();
boolean[][] dp = new boolean[m + 1][n + 1];
dp[0][0] = true; //都为空的时候结果是为true的
for (int i = 1; i <= n; ++i) {
//判断一个字符是否为*
if (p.charAt(i - 1) == '*') {
dp[0][i] = true;
} else {
break;
}
}
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
if (p.charAt(j - 1) == '*') {
//如果不包含*则是dp[i][j - 1] 如果包含*则为dp[i - 1][j]
dp[i][j] = dp[i][j - 1] || dp[i - 1][j];
} else if (p.charAt(j - 1) == '?' || s.charAt(i - 1) == p.charAt(j - 1)) {
//第i个第和j是否相等,需要判断前i-1和j-1是否相等
dp[i][j] = dp[i - 1][j - 1];
}
}
}
return dp[m][n];
}