正则表达式匹配★★★
题目描述
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 测试用例:aaa a*aaa
abbbc ab*c
abc ab*c
abcaaab a.*a.b
class Solution {
public:
bool match(char* str, char* pattern)
{
//同时走到尾部表示匹配成功
if(*str == '\0' && *pattern == '\0')
return true;
//如果字符串没有结束,模式串结束了,则表示匹配失败
//如果模式串没有结束,而字符串结束了,那么还有可能是匹配0个的情况存在
if(*str != '\0' && *pattern == '\0')
return false;
//根据当前字符的下一个字符判断是否是*
if(*(pattern+1) != '*'){
if(*str == *pattern || ( *str != '\0' && *pattern == '.' )){
return match(str+1, pattern+1);
}else{
return false;
}
}else{
if(*str == *pattern|| ( *str != '\0' && *pattern == '.' ) ){
//即使当前字符相同,也可以匹配0个
bool matchZero = match(str, pattern+2);
//匹配一个和多个算是一种情况,匹配一个在下次递归中会转化成匹配0次的情况
bool matchOneMulti = match(str+1, pattern);
return matchZero || matchOneMulti;
}else{
//匹配0个的情况
return match(str, pattern+2);
}
}
}
}
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
更多精彩

