劍指offer____正則表示式匹配
阿新 • • 發佈:2018-11-15
請實現一個函式用來匹配包括'.'和'*'的正則表示式。模式中的字元'.'表示任意一個字元,而'*'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配
class Solution { public: /* 思路 如果模式串此時是'.',那麼只需要模式串與匹配串都往後移動一個位置即可 如果現在這位的字元能匹配且且模式串的下一位是'*',我們則需要分情況討論 1.匹配串往後移動1位,模式串跳過'*' 2.匹配串往後移動1位,模式串不動 3.匹配串不動,模式串跳過'*' */ bool match(char* str, char* pattern) { if(str==nullptr || pattern==nullptr) return false; return matchCore(str,pattern); } bool matchCore(char *str,char *pattern) { if(*str=='\0' && *pattern=='\0') return true; if(*str!='\0' && *pattern=='\0') return false; if(*(pattern+1)=='*') { if(*str==*pattern || (*pattern=='.' && *str!='\0')) return matchCore(str+1,pattern+2)||matchCore(str+1,pattern)||matchCore(str,pattern+2); else return matchCore(str,pattern+2); } if(*str==*pattern || (*pattern=='.' && *str!='\0')) return matchCore(str+1,pattern+1); return false; } };