Leetcode Regular Expression
总结
1. 得到一个教训, 对于模拟题来说, 需要检查为空和越界两种情况
2. look ahead 在自动机类型题目中是非常必要的, 要根据两个字符来判断控制流的走向
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 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 ; } }; |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步