代码改变世界

leetcode - Wildcard Matching

2013-12-11 11:24  张汉生  阅读(143)  评论(0编辑  收藏  举报

 

// 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');  
    }  
};