学习了大佬的写法,这里采用的是一个二位数组记录状态,后续的优化过程还没发一下子写出来
public class Solution {
public boolean match(char[] str, char[] pattern)
{
if(str == null || pattern == null) return false;
int m = str.length, n = pattern.length;
boolean[][] d = new boolean[m+1][n+1];
d[0][0] = true;
for(int j = 1; j <=n; j++ ){
if(pattern[j-1] == '*') d[0][j] = d[0][j-2];
else d[0][j] = false;
}
for(int i = 1; i <=m; i++){
for(int j = 1; j <=n; j++){
if(isEqual(str[i-1],pattern[j-1])){
d[i][j] = d[i-1][j-1];
}else if(pattern[j-1] == '*'){
char pre = pattern[j-2];
if(isEqual(str[i-1],pre)) d[i][j] = d[i][j-2]||d[i][j-1]||d[i-1][j];
else d[i][j] = d[i][j-2];
}
}
}
return d[m][n];
}
public boolean isEqual(char c, char p){
return c == p || p == '.';
}
}

京公网安备 11010502036488号