public class Solution {
    //"aab", "d*a*b"
    public boolean isMatch(String s, String p) {
        if(s == null || p == null || (s.length() > 0 && p.length() == 0)) return false ;        
        char[] arrs = s.toCharArray() ;
        char[] arrp = p.toCharArray() ;
        //f[i][j]表示s的前i个字符与p的前j个字符是否匹配
        boolean f[][] = new boolean[arrs.length + 1][arrp.length + 1] ;
        for(int i = 0 ; i <= arrs.length ; i ++) {
            for(int j = 0 ; j <= arrp.length ; j ++) {
                if(i == 0 && j == 0) {//初始化
                    f[i][j] = true ;continue ;
                }
                if(j == 0) {//初始化
                    f[i][j] = false ;continue ;
                }
                if(i == 0) {//初始化
                    if(j == 1) {
                        f[i][j] = arrp[j-1] == '*' ? true : false ;
                    } else {
                        f[i][j] = (arrp[j-1] == '*') && f[i][j-1] ;
                    }
                    continue ;
                }
                if(arrs[i-1] == arrp[j-1] || arrp[j-1] == '?') {//匹配一个字符
                    f[i][j] = f[i-1][j-1] ;
                } else {
                    if(arrp[j-1] == '*') {//* 匹配一个字符,匹配多个字符,匹配''
                        f[i][j] = f[i-1][j-1] || f[i-1][j] || f[i][j-1] ;
                    } else {//不匹配
                        f[i][j] = false ;
                    }
                }
            }
        }
        return f[arrs.length][arrp.length] ;
    }
}