正则表达式匹配
题目描述
请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配
剑指offer版
class Solution {
public:
bool matchCore(char* str, char* pattern) {
if ((*str == '\0') && (*pattern == '\0')) // 都比较到最后一个字符时
return true;
if ((*str != '\0') && (*pattern == '\0')) // str没有结束, 但pattern结束时
return false;
if (*(pattern + 1) == '*') { // 第二个字符是*
if ((*str == *pattern) || (*str != '\0' && *pattern == '.')) // 匹配一个字符
return matchCore(str+1, pattern) //匹配到1个字符, 模式不变, 如"aa","a*"
|| matchCore(str, pattern+2); // 匹配到0个字符, 模式+2, 如"bbbba",".*a*a"
//|| matchCore(str+1, pattern+2); // 发现这个可以注释掉
else // 没有匹配到字符
return matchCore(str, pattern+2);
}
if ((*str == *pattern) || (*str != '\0' && *pattern == '.')) // 第二个字符不是*
return matchCore(str+1, pattern+1);
return false;
}
bool match(char* str, char* pattern)
{
if ((str == nullptr) || (pattern == nullptr))
return false;
return matchCore(str, pattern);
}
};