每日一题 正则表达式匹配 比较有代表性的分治+DP
先简化题目, 第一个版本考虑.和*
bool isMatch(string s, string p) {
if (p.empty()) return s.empty();
bool firstMatch = !s.empty() && s[0] == p[0];
return firstMatch && isMatch(s.substr(1), p.substr(1));
}
然后考虑 . 的情况:
bool isMatch(string s, string p) {
if (p.empty()) return s.empty();
bool firstMatch = !s.empty() && (s[0] == p[0] || p[0] == '.');
return firstMatch && isMatch(s.substr(1), p.substr(1));
}
最后再加入对于 * 的考虑:
bool isMatch(string s, string p) {
if (p.empty()) return s.empty();
bool firstMatch = !s.empty() && (s[0] == p[0] || p[0] == '.');
if (p.size() >= 2 && p[1] == '*') {
return (firstMatch && isMatch(s.substr(1), p)) || isMatch(s, p.substr(2));
}
return firstMatch && isMatch(s.substr(1), p.substr(1));
}
上面分治代码就可以通过了