【剑指offer-解题系列(53)】正则表达式匹配
来源:互联网 发布:知乎评价奚梦瑶 编辑:程序博客网 时间:2024/05/22 04:24
题目描述
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
分析
基本的函数使用递归,在函数调用过程中,总共可分为以下几种情形:
假设目标字符串 是 str ,匹配字符串是 pattern
1、如果pattern第二个字符不是 ‘*’,那么只要对比下第一个字符,然后递归比对后续字符,即str+1 和 pattern+1
2、如果第二个字符是'*',那么
(1)如果pattern和str第一个字符相同,以下两种情况满足一种即可
一、 递归比对pattern+2后续字符,即str 和 pattern+2
二、 递归比对str+1后续字符,即str+1 和 pattern
(2)如果pattern和str第一个字符不相同,也就是使用*作为取消字符用,
递归比对pattern后续字符,即str 和 pattern+2
另外需要特殊处理字符长度只有1的情形
代码实现
bool match(char* str, char* pattern )
{
if( strlen(str)<=0 && strlen(pattern)<=0)
return true;
if( strlen(str)<=0){
if(strlen(pattern)<=1)
return false;
else{
if(pattern[1]=='*')
return match(str,pattern+2 );
else
return false;
}
}
if( strlen(pattern)==1 ){
return ( strlen(str)==1 ) && (pattern[0]==str[0]|| pattern[0]=='.' ) ;
}
if(pattern[1]=='*'){
if( pattern[0]==str[0] || pattern[0]=='.' ){
bool res = match(str+1,pattern) || match(str,pattern+2 );
int k = 1;
while( k<=strlen(str) && str[k-1]==str[k] ){
res = res|| match(str+k,pattern+2 );
if(res)
return true;
k++;
}
return res;
}
else
return match(str,pattern+2 );
}
else{
return (pattern[0]==str[0] || pattern[0]=='.' )&& match(str+1,pattern+1);
}
}
{
if( strlen(str)<=0 && strlen(pattern)<=0)
return true;
if( strlen(str)<=0){
if(strlen(pattern)<=1)
return false;
else{
if(pattern[1]=='*')
return match(str,pattern+2 );
else
return false;
}
}
if( strlen(pattern)==1 ){
return ( strlen(str)==1 ) && (pattern[0]==str[0]|| pattern[0]=='.' ) ;
}
if(pattern[1]=='*'){
if( pattern[0]==str[0] || pattern[0]=='.' ){
bool res = match(str+1,pattern) || match(str,pattern+2 );
int k = 1;
while( k<=strlen(str) && str[k-1]==str[k] ){
res = res|| match(str+k,pattern+2 );
if(res)
return true;
k++;
}
return res;
}
else
return match(str,pattern+2 );
}
else{
return (pattern[0]==str[0] || pattern[0]=='.' )&& match(str+1,pattern+1);
}
}
阅读全文
0 0
- 【剑指offer-解题系列(53)】正则表达式匹配
- 剑指offer 53-正则表达式匹配
- 《剑指offer》:[53]正则表达式匹配
- 剑指offer-53字符串正则表达式匹配
- 【剑指offer】题53:正则表达式匹配
- 正则表达式匹配(递归+剑指offer)
- 剑指offer(55):正则表达式匹配
- 剑指offer(49)-正则表达式匹配
- (剑指offer)正则表达式匹配
- 剑指offer系列之五十一:正则表达式匹配
- 《剑指offer》正则表达式匹配
- 剑指offer--正则表达式匹配
- 剑指offer:正则表达式匹配
- [剑指offer]正则表达式匹配
- 剑指offer-正则表达式匹配
- 剑指offer|正则表达式匹配
- 《剑指offer》-正则表达式匹配
- 剑指offer-正则表达式匹配
- Dates and Times
- Pentaho-A Comprehensive Data Integration and Business Analytics Platform
- 离散余弦变换_原理及应用
- 整数排序 II
- Android动态权限,EasyPermissions 介绍及使用
- 【剑指offer-解题系列(53)】正则表达式匹配
- ButterKnife 框架的使用(一)
- 使用bootstrap-select插件来实现下拉菜单搜索匹配功能
- Protocol Buffer原理
- virtualenv、virtualenvwrapper安装使用
- mfc访问控件的多种方法
- 视图模板____Freemarker入门demo
- 464.整数排序 II
- 执行tox -egenconfig出现错误genconfig: could not install deps [-r/home/mistral/test-requirements.txt]