分类讨论一定要掌握

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param pattern string字符串 
     * @return bool布尔型
     */
    public boolean match (String str, String pattern) {
        int m = str.length()+1;
        int n = pattern.length()+1;

        // dp[m][n] 代表第m,n
        boolean[][] dp =new boolean[m][n];
        dp[0][0] = true;

        //p:d*d*d*
        for(int j=2; j<=n-1; j+=2){
            dp[0][j] = dp[0][j-2] && pattern.charAt(j-1) == '*';
        }

        for(int i= 1 ; i<m; i++){
            for(int j = 1; j<n; j++){
                if(pattern.charAt(j-1) == '*'){
                    //p:d* s:d
                    if(dp[i-1][j] && pattern.charAt(j-2) == str.charAt(i-1))
                        dp[i][j] = true;
                    //p:.* s:任意字符
                    else if(dp[i-1][j] && pattern.charAt(j-2) == '.')
                        dp[i][j] = true;
                    //p:a* s:空
                    else if(dp[i][j-2]) dp[i][j] = true;
                }
                //p:. s:任意
                else if(dp[i-1][j-1] && pattern.charAt(j-1) == '.')
                    dp[i][j] = true;
                //p:a s:a 对应
                else if(dp[i-1][j-1] && pattern.charAt(j-1) == str.charAt(i-1))
                    dp[i][j] = true;
            }
        }
        return dp[m-1][n-1];
    }
}