请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字
2017-09-27 09:29
3199 查看
本题源自剑指offer
-----------------------------------------------------------------------------------
如果模式串遇到*字符则有两种状态,第一匹配字符,则字符串后移一位,模式串不变,第二,模式串后移俩位和字符串后移一位,第三,忽略星号。
bool match(char* str, char* pattern)
{
if(str==NULL || pattern==NULL)
return false;
if(*str=='\0'&&*pattern=='\0')
return true;
if(*str!='\0'&& *pattern=='\0')
return false;
if(*(pattern+1)=='*'){
if((*str==*pattern) || (*pattern=='.'&&*str!='\0')){
// 1 匹配一个 2 匹配多个 3 忽略星号
return match(str+1,pattern+2) || match(str+1,pattern) || match(str,pattern+2);
}else{
//忽略星号
return match(str,pattern+2);
}
}
if((*str==*pattern)||(*str!='\0'&&*pattern=='.'))
return match(str+1,pattern+1);
return false;
}
-----------------------------------------------------------------------------------
如果模式串遇到*字符则有两种状态,第一匹配字符,则字符串后移一位,模式串不变,第二,模式串后移俩位和字符串后移一位,第三,忽略星号。
bool match(char* str, char* pattern)
{
if(str==NULL || pattern==NULL)
return false;
if(*str=='\0'&&*pattern=='\0')
return true;
if(*str!='\0'&& *pattern=='\0')
return false;
if(*(pattern+1)=='*'){
if((*str==*pattern) || (*pattern=='.'&&*str!='\0')){
// 1 匹配一个 2 匹配多个 3 忽略星号
return match(str+1,pattern+2) || match(str+1,pattern) || match(str,pattern+2);
}else{
//忽略星号
return match(str,pattern+2);
}
}
if((*str==*pattern)||(*str!='\0'&&*pattern=='.'))
return match(str+1,pattern+1);
return false;
}
相关文章推荐
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。
- 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
- 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.
- 实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。
- 判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进
- 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字
- [剑指Offer-字符串]请实现一个函数用来找出字符流中第一个只出现一次的字符。
- 《剑指offer》-实现一个函数用来判断字符串是否表示数值(包括整数和小数)
- 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
- 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- [剑指Offer-字符串]请实现一个函数用来找出字符流中第一个只出现一次的字符。
- 实现简单的输入编辑,录入正确的字符串,出现‘$’,表示撤销前一个输入,发现连续的‘$’,表示连续撤销前面的输入;发现‘%’,表示放弃前面所有录入;生成最终结果。
- 实现简单的输入编辑,录入正确的字符串,出现‘$’,表示撤销前一个输入, 发现连续的‘$’,表示连续撤销前面的输入;发现‘%’,表示放弃前面所有录入; 生成最终结果。
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0