遠景面試筆試題,實作正規表達式中的. 和 *
測試案例 match("aa","aa") false
match("aa","aa") true
match("aa","a*") true;
match("aab",".*b"); true
match("aab","c*a*b") true
#include<cstdio>
using namespace std;
class Solution {
public:
bool match(char* str, char* pattern)
{
// puts(str);
// puts(pattern);
if(str==NULL && pattern==NULL)
return true;
if(str==NULL || pattern==NULL)
return false;
return matchCore(str,pattern);
}
bool matchCore(char *str,char *pattern)
{
if(*str=='\0' && *pattern=='\0') {return true;}
if(*str!='\0' && *pattern=='\0') return false;
if(*(pattern+1)=='*')
{
if(*str==*pattern || (*pattern=='.'&&*str!='\0'))
{
//move on the next state
return matchCore(str+1,pattern+2)
//stay on the current state
|| matchCore(str+1,pattern)
//ignore a '*'
|| matchCore(str,pattern+2);
}
else return matchCore(str,pattern+2);
}
if(*str==*pattern||(*pattern=='.'&&*str!='\0'))
{
return matchCore(str+1,pattern+1);
}
return false;
}
};
int main()
{
char ch1[]="";
char ga1[]="";
char *ch=ch1;
char *ga=ga1;
Solution so;
if(so.match(ch,ga))printf("true\n");
else printf("false\n");
return 0;
}