Notes: 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 Solution: Both of the two solutions are from http://leetcode.com/2011/09/regular-expression-matching.html . Solution 3: DP. Solution 4: DP. O(n^2) Time, O(n) Space. */
bool machcore(char *str, char *pattern)
{
if (str == NULL || pattern == NULL)
return false;
if (*str == '\0'&&*pattern == '\0')
return true;
if ((*str != '\0'&&*pattern == '\0'))
return false;
if (*(pattern + 1) == '*')
{
if (*str == *pattern || *pattern == '.'&&*str != '\0')
return machcore(str + 1, pattern + 2) || machcore(str + 1, pattern
) || machcore(str, pattern + 2);
else
return machcore(str, pattern + 2);
}
if (*str == *pattern || *pattern == '.'&&*str != '\0')
return machcore(str + 1, pattern + 1);
return false;
}