Regular Expression Matching

来源:互联网 发布:腾讯云域名实名认证 编辑:程序博客网 时间:2024/06/05 20:54

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) {        if(*p == '\0')            return *s == '\0';                if(*(p+1) == '*')        {            while(*s != '\0' && (*s == *p || *p == '.'))            {                if(isMatch(s, p + 2))                    return true;                s++;            }            return isMatch(s, p + 2);        }        else        {            if(*s != '\0' && (*s == *p || *p == '.'))            {                return isMatch(s + 1, p + 1);            }            return false;        }    }};


 

0 0