Regular Expression Matching
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
由于只有“.”和“*”,直接想法很简单,判定下一个是否为“*”,如果不为“*”则判定当前是否为‘.’(或者任意字符),如果下一个为“*”则需对之后从0个到最多个重复的多种情况下判定
,最后判定一下s为空的情况。
class Solution {
public:
bool isMatch(const char *s, const char *p) {
if(*p == '\0')return *s == '\0';
if(*(p+1) != '*')
{
return (*s == *p || (*p =='.' && *s != '\0')) && isMatch(s+1,p+1);
}
while(*s == *p || (*p == '.' && *s != '\0'))
{
if(isMatch(s,p+2))return true;
s++;
}
return isMatch(s,p+2);
}
};