题目:
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
思考:
1、当模式串和待匹配串都为空的时候,返回true。
2、考虑串中的第二个字符是'*',而且'*'前面的字符在待匹配串中出现的次数为0的情况,递归判断。
3、考虑待匹配串中的第一个字符和模式串中的第一个字符是否相同,或模式串中的第一个字符是否为'.',待匹配串中非空。
(1)待匹配串和模式串同时向右移一位,递归判断
(2)模式串中的第二个字符为‘*’,模式串不变,待匹配串向右移动一位。
以上情况都不满足,返回false
代码实现如下:
class Solution {
public:
bool match(char* str, char* pattern) {
if(*str == 0 && *pattern == 0) return true;
if(*pattern != 0 && *(pattern + 1) == '*') {
if(match(str, pattern + 2)) return true;
}
if(*str == *pattern || (*str != 0 && *pattern == '.')) {
if(match(str + 1, pattern + 1)) return true;
if(*(pattern + 1) == '*' && match(str + 1, pattern)) return true;
}
return false;
}
};