LeetCode 10 Regular Expression Matching FaceBook面试题
2016-06-08 00:00
344 查看
Regular Expression Matching
Implement regular expression matching with support for
Dynamic Programming Backtracking String
这是一道经典的正则表达式匹配题目,使用暴力法盲目求解会陷入到无穷无尽的边界条件判断中,在这里需要学习动态规划、回溯等处理办法。在这个基础上,才能解决这个问题。
在这里给出一个简洁的递归算法:
值得反复学习
Implement regular expression matching with support for
'.'and
'*'.
'.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the entire input string (not partial). The function prototype should be: bool isMatch(const char *s, const char *p) Some examples: isMatch("aa","a") → false isMatch("aa","aa") → true isMatch("aaa","aa") → false isMatch("aa", "a*") → true isMatch("aa", ".*") → true isMatch("ab", ".*") → true isMatch("aab", "c*a*b") → true
Dynamic Programming Backtracking String
这是一道经典的正则表达式匹配题目,使用暴力法盲目求解会陷入到无穷无尽的边界条件判断中,在这里需要学习动态规划、回溯等处理办法。在这个基础上,才能解决这个问题。
在这里给出一个简洁的递归算法:
bool isMatch(char* s, char* p) { if (s == NULL || p == NULL) return false; if (*p == '\0') return *s == '\0'; // ".*" matches "", so we can't check (*s == '\0') here. if (*(p + 1) == '*') { // Here *p != '\0', so this condition equals with // (*s != '\0' && (*p == '.' || *s == *p)). while ((*s != '\0' && *p == '.') || *s == *p) { if (isMatch(s, p + 2)) return true; ++s; } return isMatch(s, p + 2); } else if ((*s != '\0' && *p == '.') || *s == *p) { return isMatch(s + 1, p + 1); } return false; }
值得反复学习
相关文章推荐
- Java 面试题之智力题(一千瓶药中,有一瓶毒药)
- 十二个程序员必备的优质资源推荐
- 10大基础实用算法及其讲解
- 程序员的疑惑
- 给一道关于const的面试题
- Java程序员的日常 —— 多进程开发
- 面试题4:替换字符串中的空格
- 开一篇文章 记录我的java学习路上看过的书和资料 以及杂七杂八的面试经历
- 程序员面试金典(二)
- 汇编程序员之代码风格指南
- 嵌入式软件工程师 面试经验
- [译]好程序员的五声“呐喊”
- 实习面试小记-腾讯、阿里、大摩、网易
- 链表面试题详解
- 如何在面试中发现优秀程序员(转)
- 剑指Offer----面试题29:数组中出现次数超过一半的数字
- 《黑客与画家》读书笔记
- 应届生如何为工作做准备 程序员 技术大牛
- 转载:一个程序员的顿悟
- 面试题的收集