思路:递归计算,关键在于多种情况的分析。
我将模式串的3种情况‘.’,‘字母相等’,‘字母不相等’分别讨论
每种情况分为两种子情况,模式串的后一位是' * '和不是' * '。
设置两个指针i,j表示str和Pattern的下标,还有一种特殊的情况当i==str.length时也可能返回true。
我将这种情况单独讨论了。
其实最好的分情况讨论就是讨论,模式串的下一位是否为‘*’。

 public boolean match(char[] str, char[] pattern) {
        return help(str,pattern,0,0);
    }

    private boolean help(char[] str, char[] pattern, int i, int j) {
        if (i == str.length && j == pattern.length) return true;
        if(j>=pattern.length)return false;
        if (i == str.length&&j<pattern.length) {
            if((j + 1) < pattern.length && pattern[j + 1] == '*'){
                return help(str,pattern,i,j+2);
            }
            return false;
        }

        if (pattern[j] == '.' && (j + 1) < pattern.length && pattern[j + 1] == '*') {
            return help(str, pattern, i, j+2)||help(str,pattern,++i,j);
        }else if (pattern[j] == '.'){
            return help(str, pattern, ++i, ++j);
        }
        if (str[i] == pattern[j] && (j + 1) < pattern.length && pattern[j + 1] == '*') {
            return help(str, pattern, i, j + 2) || help(str, pattern, ++i, j);
        } else if (str[i] == pattern[j]) {
            return help(str, pattern, ++i, ++j);

        }
        if (str[i] != pattern[j] && (j + 1) < pattern.length && pattern[j + 1] == '*') {
            return help(str, pattern, i, j + 2);
        } else   {
            return false;
        }

    }