剑指offer——21正则表达式匹配
题目描述
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
题解:
这道题无法使用动态规划,因为不知道字符的长度;
嗯嗯,正则匹配我还是稀里糊涂 的,等弄明白了,再补充 ~待更新。。。
1 class Solution { 2 public: 3 bool match(char* str, char* pattern) 4 { 5 if (str == nullptr || pattern == nullptr)return false; 6 return matchCore(str, pattern); 7 } 8 bool matchCore(const char *str, const char *pattern) 9 { 10 if (*str == '\0' && *pattern == '\0')return true; 11 if (*str != '\0'&& *pattern == '\0')return false; 12 if (*(pattern + 1) == '*') 13 { 14 if (*pattern == *str || (*pattern == '.' && *str != '\0')) 15 return matchCore(str + 1, pattern + 2) || //移动到下一个位置 16 matchCore(str + 1, pattern) || // 待在自己的位置不动 17 matchCore(str, pattern + 2);//忽略一个‘*’ 18 else 19 return matchCore(str, pattern + 2);//忽略一个'*' 20 } 21 if (*str == *pattern || (*pattern == '.' && *str != '\0')) 22 return matchCore(str + 1, pattern + 1); 23 return false; 24 } 25 };