【leetCode】Regular Expression Matching

来源:互联网 发布:js 变量未定义 编辑:程序博客网 时间:2024/06/18 14:54

题意:正则表达式匹配,有个两个匹配原则:

1、“.”与任何字符匹配

2、"*"与零次或多次*之前的字符匹配

思路:用递推的方法。

.很容易

对于*,看代码吧,说不清楚了

bool match(string s,string p,int sl,int pl){    int k;    // cout<<sl<<" "<<pl<<endl;    if(s.length()==sl)    {        if(p.length()==pl) return true;        for(k=pl;k<p.length();k+=2)        {            if(!(p[k]!='*'&&k+1<p.length()&&p[k+1]=='*')) return false;        }        if(k==p.length()) return true;        return false;    }    if(p.length()==pl&&s.length()>sl) return false;    if(pl+1<p.length()&&p[pl+1]=='*')    {        k=sl;        while((s[k]==p[pl]||'.'==p[pl])&&k<s.length())        {            if(match(s,p,k+1,pl+2))return true;            k++;        }        return match(s,p,sl,pl+2);    }    else if(s[sl]==p[pl]||'.'==p[pl]) return match(s,p,sl+1,pl+1);    return false;}bool isMatch(string s, string p){    return match(s,p,0,0);}


0 0