《劍指offer》正則表示式匹配
阿新 • • 發佈:2019-01-04
【 宣告:版權所有,轉載請標明出處,請勿用於商業用途。 聯絡信箱:[email protected]】
題目描述
請實現一個函式用來匹配包括'.'和'*'的正則表示式。模式中的字元'.'表示任意一個字元,而'*'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配
思路
如果模式串此時是'.',那麼只需要模式串與匹配串都往後移動一個位置即可
如果現在這位的字元能匹配且且模式串的下一位是'*',我們則需要分情況討論
1.匹配串往後移動1位,模式串跳過'*'
2.匹配串往後移動1位,模式串不動
3.匹配串不動,模式串跳過'*'
class Solution { public: 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; } };