Regular Expression Matching

来源:互联网 发布:上海心动网络怎么样 编辑:程序博客网 时间:2024/06/06 00:46
class Solution {public:    bool isMatch(const char* s,int sstart,const char* p,int pstart)    {        if((sstart==strlen(s))&&(pstart==strlen(p)))        {            return true;        }        /*        if(sstart==strlen(s))        {            return false;        }        */        if(pstart==strlen(p))        {            return false;        }        bool flag=false;        if((pstart+1<strlen(p))&&(p[pstart+1]=='*'))        {            flag=true;        }        if(flag)        {            if(p[pstart]=='.')            {                             if(isMatch(s,sstart,p,pstart+2))                {                    return true;                }                int sindex=sstart;                while(sindex<strlen(s))                {                    if(isMatch(s,sindex+1,p,pstart+2))                    {                        return true;                    }                    sindex++;                }                return false;            }            else            {                if(isMatch(s,sstart,p,pstart+2))                {                    return true;                }                char curc=p[pstart];                int sindex=sstart;                while(s[sindex]==curc)                {                    if(isMatch(s,sindex+1,p,pstart+2))                    {                        return true;                    }                    sindex++;                }                return false;                            }        }        else        {            if(p[pstart]=='.')            {                if(isMatch(s,sstart+1,p,pstart+1))                {                    return true;                }                else                {                    return false;                }            }            else            {                if(s[sstart]!=p[pstart])                {                    return false;                }                else                {                    if(isMatch(s,sstart+1,p,pstart+1))                    {                        return true;                    }                    else                    {                        return false;                    }                }            }        }    }    bool isMatch(const char *s, const char *p) {        if(s==NULL||p==NULL)        {            return false;        }        return isMatch(s,0,p,0);    }};

0 0
原创粉丝点击