class="markdown_views prism-atom-one-light">
面试题19:正则表达式匹配
请实现一个函数用来匹配包含’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但与”aa.a”及”ab*a”均不匹配。
基本可以看成编译原理的parser问题,但是找出文法不容易,也没必要为每种情况写个匹配的函数(递归下降),可以画个NFA分析一下,然后在递归里直接用字符串游标的移动记录匹配情况。
#include
using namespace std;
bool matchCore(const char* str, const char* pattern);
bool match(const char* str, const char* pattern) {
if(str == nullptr || pattern == nullptr)
return false;
return matchCore(str, pattern);
}
bool matchCore(const char* str, const char* pattern) {
if(*str == '