您的位置:首页 > 职场人生

剑指offer 面试题53:正则表达式匹配

2016-12-16 21:48 441 查看
这题主要考察先分类后递归的思想,还有对于知识迁移(以 . * 考察).

总结下:

1.对于 * 的处理有3种:

(1)str维持,pattern跳2个字符.(a和b*)

(2)str跳1个字符,pattern跳2个字符.(a和a*)

(3) str跳1个字符,pattern维持.(a和a*)

2.涉及到递归,原来的match只用于错误检测.通常指针检测NULL,字符串检测空.

3.递归 只检测 if(*str!=’\0’ && *pattern==’\0’),不检测与他相反的判断,是因为考虑了 “”,”a*”这种情况是存在的.

4.只要涉及到指针,并且有移动指针的操作,就一定要考虑到越界.

所以当只考虑到第(1)种,没考虑到第(2)种

(1)*pattern==’.’

(2)*pattern==’.’ && *str!=’\0’

可以从指针越界方面思考到要判断str的情况.

下面是代码:

bool matchCore(char *str,char *pattern){
if(*str=='\0' && *pattern=='\0'){
return true;
}
if((*str!='\0' && *pattern=='\0')){
return false;
}

if(*(pattern+1)=='*'){
if(*pattern==*str || (*pattern=='.' && *str!='\0')){
return matchCore(str,pattern+2)
|| matchCore(str+1,pattern+2)
|| matchCore(str+1,pattern);
}else{
return matchCore(str,pattern+2);
}
}
if((*pattern=='.'&& *str!='\0') || *str==*pattern){
return matchCore(str+1,pattern+1);
}
return false;
}
bool match(char* str, char* pattern){
if(str==NULL || pattern==NULL){
return false;
}
return matchCore(str,pattern);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: