上来想到用递归求解,结果超时,先是考虑把多个连续的*合成一个*处理,仍然超时,最后在http://blogs.com/x1957/p/3517096.html处看到,可以通过类似回溯的方式求解
class Solution {
public:
bool isMatch(const char *s, const char *p) {
const char* star = nullptr;
const char* rs = nullptr;
while(*s) {
if(*s == *p || *p == '?') { //match
s++; p++;
continue;
}
if(*p == '*') {
star = p; // record star
p++; //match from next p
rs = s; // record the position of s , star match 0
continue;
}
if(star != nullptr) { //if have star in front then backtrace
p = star + 1; //reset the position of p
s = rs + 1;
rs ++; //star match 1,2,3,4,5....
continue;
}
return false; //if not match return false
}
while(*p == '*') p++; //skip continue star
return *p == '\0'; // successful match
}
};