正则表达式匹配
请实现一个函数用来匹配包括'.'和'*'的正则表达式。
模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。
在本题中,匹配是指字符串的所有字符匹配整个模式。
例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。
样例
输入:
s="aa"
p="a*"
输出:true
class Solution {
public:
int n,m;
vector<vector<int> >f;
string s,p;
bool isMatch(string _s, string _p)
{
s=_s;
p=_p;
n=s.size();
m=p.size();
f=vector<vector<int> >(n+1,vector<int>(m+1,-1));
return dp(0,0);
}
bool dp(int x,int y)
{
if(f[x][y]!=-1)
return f[x][y];
if(y==m)
return f[x][y]=x==n;
bool first_match= x<n &&(p[y]=='.'||s[x]==p[y]);
if(y+1<m && p[y+1]=='*')
f[x][y]=dp(x,y+2)||dp(x+1,y);
else
f[x][y]=first_match && dp(x+1,y+1);
return f[x][y];
}
};