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]; } }