LeetCode_Regular Expression Matching

Implement regular expression matching with support for '.' and '*'.





'.' Matches any single character.

'*' Matches zero or more of the preceding element.



The matching should cover the entire input string (not partial).



The function prototype should be:

bool isMatch(const char *s, const char *p)



Some examples:

isMatch("aa","a") ? false

isMatch("aa","aa") ? true

isMatch("aaa","aa") ? false

isMatch("aa", "a*") ? true

isMatch("aa", ".*") ? true

isMatch("ab", ".*") ? true

isMatch("aab", "c*a*b") ? true

  

class Solution {

public:

    bool isMatch(const char *s, const char *p) {

        // Start typing your C/C++ solution below

        // DO NOT write int main() function    

         assert(s != NULL  && p != NULL);        

        if(*p == '\0') return *s == '\0';

        if(*(p+1) != '*'){

            if(*s == *p || (*p == '.' && *s != '\0') )return isMatch(s+1,p+1);

            return false;

        }else{

            while(*s == *p ||(*p == '.' && *s != '\0')){

                if(isMatch(s,p+2)) //匹配零个

                  return true;

                s++; //匹配多个

            }

            //while 结束后,和*后的进行匹配

            return isMatch(s, p+2) ;            

        }

    }

};

http://www.cnblogs.com/yingzhongwen/archive/2013/04/20/3031915.html

你可能感兴趣的:(LeetCode_Regular Expression Matching)