剑指offer-52:正则表达式匹配
目录
1题目描述
请实现一个函数用来匹配包括’ . ‘和 ’ * ‘的正则表达式。
模式中的字符’ . ‘表示任意一个字符,而’ * ‘表示它前面的字符可以出现任意次(包含0次)。
在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配
2题目解析
3题目答案
class Solution {
public:
bool match(char* str, char* pattern){
if (*str == '\0' && *pattern == '\0') return true;
if (*str != '\0' && *pattern == '\0') return false;
//if the next character in pattern is not '*'
if (*(pattern+1) != '*'){
if (*str == *pattern || (*str != '\0' && *pattern == '.'))
return match(str+1, pattern+1);
else
return false;
}
//if the next character is '*'
else{
if (*str == *pattern || (*str != '\0' && *pattern == '.'))
return match(str, pattern+2) || match(str+1, pattern);
//str='a',pattern='a*' 匹配1个 //str='aa',pattern='a*'
else
return match(str, pattern+2); //如果str='a', pattern='b*a'匹配0个
}
}
};