剑指OFFER 17.正则表达式匹配


正则表达式匹配

请实现一个函数用来匹配包括'.'和'*'的正则表达式。

模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含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];
    }
    
};

文章作者: LHL
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LHL !
评论
  目录