class Solution {
    bool matchCore(const string& str,const string& pattern){
        if(str.empty()&&pattern.empty())
            return true;
        if(!str.empty()&&pattern.empty())
            return false;
        if(pattern[1]=='*'){
            if(pattern[0]==str[0]||(pattern[0]=='.'&&!str.empty()))
                                //进入下一状态
                return matchCore(str.substr(1),pattern.substr(2))
                                //留在当前状态
                                ||matchCore(str.substr(1), pattern)
                                //忽略一个'*'
                                ||matchCore(str, pattern.substr(2));
            else
                                //忽略一个'*'
                return matchCore(str, pattern.substr(2));
        }
        if(str[0]==pattern[0]||(pattern[0]=='.'&&!str.empty()))
            return matchCore(str.substr(1), pattern.substr(1));
        
        return false;
    }
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param pattern string字符串 
     * @return bool布尔型
     */
    bool match(string str, string pattern) {
        // write code here
        return matchCore(str,pattern);
    }
};