// token form http://blog.csdn.net/sunbaigui/article/details/8981369
// still need more check
class Solution {
//if strlen is used, then it will be TLE
//iteration based solution
public:
bool isMatch(const char *s, const char *p) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
//int len1 = strlen(s);
//int len2 = strlen(p);
bool star = false;
const char* starPtr = NULL;
const char* savePtr = NULL;
while(*s != '\0')
{
if(*p == '?') s++, p++;
else if(*p == '*')
{
while(*p == '*') p++;
p--;
starPtr = p;
p++;
savePtr = s;
star = true;
}
else
{
if(*s == *p) s++, p++;
else
{
if(star == true) s = ++savePtr, p = starPtr+1;//depend on star
else return false;
}
}
}
while(*p == '*') p++;
return (*s == '\0' && *p == '\0');
}
};