正则表达式匹配★★★
题目描述
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含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实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

更多精彩