public class Solution {
    public boolean match(char[] str, char[] pattern)
    {
        //检查边界
       if(str==null||pattern==null){
           return false;
       }
        //定义两个指针分别指向str和pattern
        int indexOfStr=0;
        int indexOfPattern=0;
        return matchHelper(str,indexOfStr,pattern,indexOfPattern);
    }

    public boolean matchHelper(char[] str,int indexOfStr,char[] pattern,int indexOfPattern){
        //判断边界条件,指针索引完成
        if(indexOfStr==str.length&&indexOfPattern==pattern.length){
            return true;
        }
        //indexOfPattern先到尾部则匹配失败
        if(indexOfPattern==pattern.length&&indexOfStr<str.length){
            return false;
        }
        //pattern的第二个字符为'*',且第一个字符匹配,边界为模式指针未达到末尾
        if(indexOfPattern+1<pattern.length&&pattern[indexOfPattern+1]=='*'){
            if((indexOfStr!=str.length&&str[indexOfStr]==pattern[indexOfPattern])||(indexOfStr!=str.length&&pattern[indexOfPattern]=='.')){
            return matchHelper(str,indexOfStr,pattern,indexOfPattern+2)
                ||matchHelper(str,indexOfStr+1,pattern,indexOfPattern+2)
                ||matchHelper(str,indexOfStr+1,pattern,indexOfPattern);
        }else{
            //第一个字符不匹配,pattern直接移动两位
            return matchHelper(str,indexOfStr,pattern,indexOfPattern+2); 
    }
        }
        //pattern的第二个字符不为'*',且第一个字符匹配
        if((indexOfStr!=str.length&&str[indexOfStr]==pattern[indexOfPattern])
           ||(indexOfStr!=str.length&&pattern[indexOfPattern]=='.')){
            return matchHelper(str,indexOfStr+1,pattern,indexOfPattern+1); 
        }else{
                        //第一个字符不匹配
            return false;
        }


}
}