10. 正则表达式匹配
思路:dfs,判断p的第二个是否为 * ,是的话就有两种选择,一种是p[0]==s[0],然后接着匹配s[1]和p[0].另外一种就是不和p[0]、p[1]匹配,和p[2]后面的匹配(下面提示说了,遇见*,就代表前面已经匹配成功,说白了,这一步就是选择*的作用为0);p的第二个不是为 *,则直接判断p[0]与s[0]是否相等就行。
注意:这题说真的,看的不太懂,"所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串"这句话的涵盖到底是什么意思,这下面三张是我找出来矛盾的地方
class Solution {
public:
bool isMatch(string s, string p) {
if(p.empty()) return s.empty();
bool flag=s.size()&&(s[0]==p[0]||p[0]=='.');
if(p.size()>=2&&p[1]=='*'){
return flag&&isMatch(s.substr(1),p)||isMatch(s,p.substr(2));
}else{
return flag&&isMatch(s.substr(1),p.substr(1));
}
}
};