Regular Expression Matching

来源:互联网 发布:aes java代码 编辑:程序博客网 时间:2024/04/30 09:18

class Solution {public:    bool isMatch(const char *s, const char *p) {       return match(s, 0, p, 0, 0);    }    bool match(const char*s, int i, const char* p, int j, char lastChar){       if(i>=strlen(s) && j>=strlen(p))        return true;        if(lastChar!=0){        if(i>strlen(s)) //no need go deeper        return false;        bool b1 = match(s, i, p, j, 0);        bool b2 = 0;            if(lastChar == s[i] || lastChar=='.'){                b2 = match(s, i+1, p, j, lastChar);            }return b1||b2;        }        if(j+1<strlen(p) && p[j+1]=='*'){        char c = p[j];        j+=2;        while(j<strlen(p) && p[j]==c && j+1<strlen(p) && p[j+1]=='*') //a*a*a*a*        j+=2;        return match(s, i, p, j, c);        }        if(j>=strlen(p) || i>=strlen(s)) //after check c*         return false;        if(s[i] == p[j] || p[j]=='.')            return match(s, i+1, p, j+1, lastChar);        else            return false;    }};

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


0 0
原创粉丝点击