学习了大佬的写法,这里采用的是一个二位数组记录状态,后续的优化过程还没发一下子写出来

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 == '.';
    }
}