每日一題 正則表達式匹配 比較有代表性的分治+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));
}
上面分治代碼就可以通過了