劍指offer面試題19:正則表示式匹配
阿新 • • 發佈:2019-01-05
題目
請實現一個函式用來匹配包括’.’和’*’的正則表示式。模式中的字元’.’表示任意一個字元,而‘*’表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串”aaa”與模式”a.a”和”ab*ac*a”匹配,但是與”aa.a”和”ab*a”均不匹配。
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 (*pattern == *str || (*pattern == '.' && *str != '\0')) { return matchCore(str + 1, pattern + 2) || // *前面的字元出現1次 matchCore(str + 1, pattern) || // *前面的字元出現多次 matchCore(str, pattern + 2); // *前面的字元出現0次 } else { return matchCore(str, pattern + 2); // 當前對比的兩個字元不同,因此*前出現的字元出現了0次,所以pattern後移兩位,str不變 } } if (*pattern == *str || (*pattern == '.' && *str != '\0')) { return matchCore(str + 1, pattern + 1); } return false; } };