学习了大佬的写法,这里采用的是一个二位数组记录状态,后续的优化过程还没发一下子写出来
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 == '.'; } }