题目要求这里不再赘述,有两点点需要注意:
一、"*" 所代表的含义是代表其之前的字符的0个或多个重复。如 “a*” 代表 ‘a‘ 后面跟0个或者多个字符 ‘a‘;
二、用 C++ 实现的话后面函数的入参是 string 型,在这里按字符处理的时候有诸多不便,可以转换为 char * 进行处理。
class Solution {
public:
bool isMatchChar(const char *s, const char *p){
if(*p == '\0')
return *s == '\0';
if(*(p + 1) != '*'){
if(*s != '\0' && (*p == *s || *p == '.')){
return isMatchChar(s + 1, p + 1);
}else{
return false;
}
}else{
while(*s != '\0' && (*s == *p || *p == '.')){
if(isMatchChar(s, p + 2))
return true;
s++;
}
return isMatchChar(s, p + 2);
}
}
bool isMatch(string s, string p) {
int lens = s.length();
int lenp = p.length();
char* schar = new char[lens + 1];
char* pchar = new char[lenp + 1];
strcpy(schar, s.c_str());
strcpy(pchar, p.c_str());
schar[lens] = '\0';
pchar[lenp] = '\0';
return isMatchChar(schar, pchar);
}
};
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/ny_mg/article/details/46823623