class Solution { public: /* 把能确定的都确定下来,(能确定的一般都是只能满足一种迭代方程的,或者不再迭代方程定义域内的) */ bool match(string str, string pat) { return cat(str,pat,0,0); } bool cat(string str,string pat,int i,int j){ if(j == pat.size()) return i == str.size(); bool first_match = i < str.size() && (pat[j] == '.' || pat[j] == str[i]); // 当前字符是否匹配! if(j + 1 < pat.size() && pat[j+1] == '*'){// 如果下一步遇到* return cat(str,pat,i,j+2) || (first_match && cat(str,pat,i+1,j));// 考虑*代表0个 或多个! }else { return first_match && cat(str,pat,i+1,j+1);// 没遇到*同时先后移动! } } };