【题目描述】
请实现一个函数用来匹配包括【.】和【*
】的正则表达式。
模式中的字符【.】表示任意一个字符,而【*
】表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配
【示例】
输入 | 输出 |
---|---|
“aaa”,“a*a” | true |
【解法】-递归法
详细原理讲解可参见https://blog.csdn.net/jfkidear/article/details/90261170
class Solution {
public:
bool match(char* str, char* patten)
{
//两者都为空 true
if(*str == '\0' && *patten == '\0')
return true;
//str不空 patten空
if(*str != '\0' && *patten == '\0')
return false;
//str空 patten不空
//比如s为空,p为'.*',照样可以返回true
if (*(patten + 1) != '*') //匹配当前字符,此处指针向后移一位
{
if(*str == *patten || (*str != '\0' && *patten =='.')) //str : any patten :.
return match(str + 1, patten + 1);
else
return false;
}
else //patten +1 == *
{
if (*str == *patten || (*str != '\0' && *patten =='.'))
return match(str, patten + 2) || match(str + 1, patten);
// aa a*aa
//aaa .*a
else //aa c*aa
return match(str, patten + 2);
}
}
};