初始化要考虑主串为空字符串,模式串为 a*b*c*
的形式。
一般情况时,根据模式串是普通字符
、'.'
、'*'
分情况考虑。为'*'
时,考虑匹配0次
和匹配多次
的情况,匹配多次时要注意判断前提是能匹配。
java
class Solution {
public boolean isMatch(String s, String p) {
int m = s.length(), n = p.length();
boolean[][] dp = new boolean[m + 1][n + 1];
dp[0][0] = true;
for(int i = 2; i <= n; i += 2) {
if(p.charAt(i - 1) == '*'){
dp[0][i] = dp[0][i - 2];
}
}
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++){
if(p.charAt(j - 1) == s.charAt(i - 1)){
dp[i][j] = dp[i - 1][j - 1];
}else if(p.charAt(j - 1) == '.'){
dp[i][j] = dp[i - 1][j - 1];
}else if(p.charAt(j - 1) == '*'){
dp[i][j] = dp[i][j - 2]; // 匹配0次
if(p.charAt(j - 2) == s.charAt(i - 1) || p.charAt(j - 2) == '.') dp[i][j] |= dp[i - 1][j]; // 匹配多次
}
}
}
return dp[m][n];
}
}