Regular Expression Matching

来源:互联网 发布:闽南语我的心情无人知 编辑:程序博客网 时间:2024/06/05 00:44
-----QUESTION-----

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") ? falseisMatch("aa","aa") ? trueisMatch("aaa","aa") ? falseisMatch("aa", "a*") ? trueisMatch("aa", ".*") ? trueisMatch("ab", ".*") ? trueisMatch("aab", "c*a*b") ? true

-----SOLUTION-----

class Solution {public:    bool isMatch(const char *s, const char *p) {        if (s == NULL || p == NULL)             return false;        if (*p == '\0')             return  *s == '\0';                if (*(p+1) == '*') {            //            // notice: ".*" means repeat '.' 0 or more times            //            while ((*s != '\0' && *p == '.') || *s == *p) {                if (isMatch(s, p + 2))                    return true;                s += 1;            }            return isMatch(s, p + 2);        }         else if ((*s != '\0' && *p == '.') || *s == *p) {            return isMatch(s + 1, p + 1);        }        return false;    }};


0 0