LeetCode | Regular Expression Matching

来源:互联网 发布:淘宝 外网代理 编辑:程序博客网 时间:2024/04/28 20:55

题目:

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

思路:

递归的方式完成。考虑到*的情况,每次读入两位数值。

代码:

class Solution {public:    bool isMatch(const char *s, const char *p) {        // Start typing your C/C++ solution below        // DO NOT write int main() function           return canMatch(s, 0, p, 0);    }        bool canMatch(const char *s, int i, const char *p, int j)    {        if(s[i] == '\0' && p[j] == '\0')        {            return true;        }        else if(s[i] == '\0')        {            if(p[j+1] == '*')            {                return canMatch(s, i, p, j+2);            }            else            {                return false;            }        }        else if(p[j] == '\0')        {            return false;        }        if(p[j+1] == '*')        {            if(s[i] == p[j] || p[j] == '.')            {                return canMatch(s, i+1, p, j) || canMatch(s, i, p, j+2);            }            else            {                return canMatch(s, i, p, j+2);            }        }        else        {            if(s[i] == p[j])            {                return canMatch(s, i+1, p, j+1);            }            else if(p[j] == '.')            {                return canMatch(s, i+1, p, j+1);            }            else            {                return false;            }        }    }};


原创粉丝点击