剑指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的情况.
下面是代码:
总结下:
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); }
相关文章推荐
- 剑指Offer面试题53:正则表达式匹配 Java实现
- 【剑指Offer学习】【面试题53:正则表达式匹配】
- 剑指offer--面试题53:正则表达式匹配
- 剑指offer-面试题53-正则表达式匹配
- 剑指offer-面试题53:正则表达式匹配
- 【剑指Offer】面试题53:正则表达式匹配
- 剑指offer - 面试题53:正则表达式匹配
- 剑指Offer 53题 正则表达式匹配 Java版
- 剑指offer 53-正则表达式匹配
- 【剑指offer】题53:正则表达式匹配
- 剑指Offer 面试题19:正则表达式匹配 Java代码实现
- 【剑指offer-解题系列(53)】正则表达式匹配
- 剑指offer--面试题19:正则表达式匹配
- 【剑指offer】面试题19:正则表达式匹配
- 剑指offer-53字符串正则表达式匹配
- [剑指offer]正则表达式匹配
- 面试题53 正则表达式匹配
- 剑指offer---19(正则表达式匹配)
- 面试题53:正则表达式匹配
- 剑指offer--正则表达式匹配