|
|
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;
}