劍指offer 面試題19:正則表示式匹配
阿新 • • 發佈:2018-11-19
請實現一個函式用來匹配包括'.'和'*'的正則表示式。模式中的字元'.'表示任意一個字元,而'*'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配
class Solution { public: 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)|| //匹配串與模式串一樣,匹配串++ matchcore(str,pattern+2)|| //匹配串與模式串不一樣,模式串+2 matchcore(str+1,pattern+2); //匹配完一個 要同時滿足以上三種情況 else return matchcore(str,pattern+2); } if(*str == *pattern || (*pattern=='.'&&*str!='\0')) //模式串下一個不為*,當前兩串相等或匹配串為. return matchcore(str+1,pattern+1); return false; } bool match(char* str, char* pattern) { if(str==nullptr || pattern == nullptr) return false; return matchcore(str,pattern); } };