题目:
更正代码:
class Solution {
public:
bool match(char* str, char* pattern)
{
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'))
return matchCore(str + 1, pattern) || matchCore(str, pattern + 2);
else
return matchCore(str, pattern + 2);
}
if (*str == *pattern || (*pattern == '.'&&*str != '\0'))
return matchCore(str + 1, pattern + 1);
return false;
}
};
***************************************************************************以下方法有缺陷
#include<iostream>
using namespace std;
bool match(char* str, char* pattern)
{
if (str == NULL || pattern == NULL){
return false;
}
if (str[0] != pattern[0] && pattern[0] != '.'){
return false;
}
char* p = str;
char* index;
char* q = pattern;
while (*p != '\0'&&*q != '\0'){
if (*p == *q || *q == '.'){
p++;
q++;
}
else if (*q == '*'){
p++;
q++;
}
else if (*(q + 1) == '*'){
q += 2;
}
}
if (*p != '\0'){
return false;
}
else{
index = q;
while (*index != '\0'){
if (*(index + 1) == '*'){
index++;
}
return false;
}
return true;
}
}
int main(){
char* str = "aaa";
char* pattern = "ab*ac*ad*";
cout << match(str, pattern);
system("pause");
return 0;
}