代码改变世界

Regular Expression Matching

2014-12-15 17:06  李涛的技术博客  阅读(132)  评论(0编辑  收藏  举报

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

 

bool isMatch(const char* s, const char* p)
{
    if (s == NULL || p == NULL)
        return false;
    if (*p == '\0')
        return *s == '\0';

    // next char is not '*'
    if (*(p+1) != '*')
            return ((*p == *s) || (*p == '.' && *s != '\0')) && isMatch(s+1, p+1);
    // next char is '*'
    while ((*p == *s) || (*p == '.' && *s != '\0'))
    {
        if (isMatch(s, p+2))
            return true;
        s++;
    }
    return isMatch(s, p+2);
}

 

 

http://leetcode.com/2011/09/regular-expression-matching.html