![]()
class Solution {
public boolean isMatch(String s, String p) {
int m = s.length(), n = p.length();
char[] arrs = s.toCharArray();
char[] arrp = p.toCharArray();
boolean[][] dp = new boolean[m+1][n+1];
dp[0][0] = true; // 初始化
for(int i = 2; i <= n; i++) { // '*' 匹配零个或多个前面的那((一个)注意是一个)元素
if(arrp[i-1] == '*' && dp[0][i-2]) dp[0][i] = true;
}
for(int i = 1; i <= m; i++) {
for(int j = 1; j <= n; j++) {
if(arrp[j-1] == '.' || arrp[j-1] == arrs[i-1]) {
dp[i][j] = dp[i-1][j-1];
} else if (arrp[j-1] == '*') {
if(dp[i][j-2]) { // *匹配0个;
dp[i][j] = true;
} else if(arrp[j-2] == arrs[i-1] || arrp[j-2] == '.') {
dp[i][j] = dp[i-1][j]; // *匹配多个
}
}
}
}
return dp[m][n];
}
}