题目:
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
题意:
用p指向的正则表达式字符串来判断其是否和s指向的字符串相匹配,其中’.’代表除了’ ’之外的任意一个字符,而若某个字符后面跟了’*’则表示可以有0个或者多个这个字符。
思路:
这题若没有’*’,则依次匹配,遇到*p!=*s时返回false即可,遇到’.’就算*s和*p匹配,但是有了’*’,则这题的关键点就是考虑后面带’*’的字符有0个和多个的情况。本题用递归的方法来实现。若匹配,则isMatch返回true。考虑p指向的字符串的字符后面带有*时要匹配0个或者多个s中的字符,则关键代码如下:
while((*p==*s) || (*p=='.' && *s != '