题意:正则表达式匹配,有个两个匹配原则:
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);
}