正则表达式的匹配
(我说大晚上看这个,锻炼人的思维…你信吗?)
思路:
1、两个都为空,返回真
2、第一个为空,但是第二个不为空,返回假(如果第一个为空,但是第二个不空,是有可能返回真的,比如 “” 和 “.")
3、pattern中当前位置的下一个不是“ * ”,如 bc 和 cd ,直接比较当前位置,能够匹配就继续配下一个,不匹配,直接返回false; 如果pattern的下一个是“ * ”,那这里就要分为匹配一个或者多个,如 bbbbc 和 bc,那str就要++,pattern不变,匹配了0个,如 cd 和 a*c,这时候就把pttern向后移动两位,跳过” * ".
class Solution {
public:
bool match(char* str, char* pattern)
{
if(*str=='\0'&&*pattern=='\0') //两个都为空返回真
return true;
if(str!=NULL&&*pattern==NULL) //第一个不为空,第二个为空
return false;
if(*(pattern+1)!='*')
{
if((*str==*pattern)||(*str!='\0'&&*pattern=='.'))
return match(str+1, pattern+1);
else
return false;
}
else
{
if((*str==*pattern)||(*str!='\0'&&*pattern=='.'))
return match(str+1, pattern)||match(str, pattern+2);
else
return match(str,pattern+2);
}
}
};