华电北风吹
天津大学认知计算与应用重点实验室
日期:2015/10/14
题目描述:
请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配
解析:
这道题目跟微软一道求一个数组里面有多少个顺序递增的斐波那契数列数字属于类似的问题。里面需要考虑特殊情况”.*a”,还有就是其他的细节考虑。
代码:
class Solution
{
public:
bool match(char* str, char* pattern)
{
if(str[0]=='\0')
{
if(pattern[0]=='\0')
return true;
if(pattern[1]=='*')
return match(str,pattern+2);
return false;
}
if(pattern[0]=='\0')
return false;
else
{
if(pattern[1]=='*')
{
bool result=false;
result=result||match(str,pattern+2);
if(result)
return true;
while (str[0]==pattern[0]||((pattern[0]=='.')&&(str[0]!='\0')))
{
result=result||match(++str,pattern+2);
if(result)
return true;
}
return result;
}
if((pattern[0]=='.')||(str[0]==pattern[0]))
{
return match(++str,++pattern);
}
return false;
}
}
};