总结
1. 得到一个教训, 对于模拟题来说, 需要检查为空和越界两种情况
2. look ahead 在自动机类型题目中是非常必要的, 要根据两个字符来判断控制流的走向
代码
class Solution { public: bool isMatch(const char *s, const char *p) { int len1 = strlen(s); int len2 = strlen(p); if(len1 == 0 && len2 == 0) return true; //if(len1 == 0 && len2 != 0) return false; if(len1 != 0 && len2 == 0) return false; bool star = false; if(len2 >= 2 && *(p+1) == '*') star = true; if(!star) { // no star if(len1 == 0) return false; if(p[0] == '.' || p[0] == s[0]) { return isMatch(s+1, p+1); } return false; } // have star if(p[0] == '.') { for(int k = 0; k <= len1; k ++) { if(isMatch(s+k, p+2)) return true; } } else { if(isMatch(s, p+2)) return true; for(int k = 1; k <= len1 && s[k-1] == p[0]; k ++) { if(isMatch(s+k, p+2)) return true; } } return false; } };