题目:
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) {
// 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;
}
}
}
};