码迷,mamicode.com
首页 > 编程语言 > 详细

算法复习:递归

时间:2020-02-07 20:49:41      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:spl   not   +=   substr   ret   ble   gif   ext   eve   

leedcode 10. 正则表达式匹配

递归解法,时间复杂度比较高,后面要尝试改成动规

技术图片
bool end_or_not(string p)
{
    for(int i=0;i<p.size();i+=2)
    {
        if(((p[i]>=a&&p[i]<=z)||p[i]==.)&&p[i+1]==*)
            continue;
        return false;
    }
    return true;
}
bool check(string s, string p)
{
    int donser[27];
    memset(donser,0,sizeof(donser));
    for(int i=0;i<p.size();i++)
    {
        if(p[i]==.||p[i]==*)
            continue;
        if(donser[p[i]-a]==0)
        {
            donser[p[i]-a]=1;
            int lable=0;
            if(p[i+1]==*)
                continue;
            for(int j=0;j<s.size();j++)
            {
                if(s[j]==p[i])
                {
                    lable=1;
                    break;
                }
            }
            if(lable==0)
                return false;
        }
    }
    return true;
}
class Solution {
public:
   bool isMatch(string s, string p)
    {
        int ptr_s=0,ptr_p=0;
        bool x=0;
        char now=p[ptr_p],next=p[ptr_p+1];
        if(check(s,p)==false)
            return false;
        if(s[ptr_s]==\0)
        {
            return end_or_not(p.substr(ptr_p,p.size()-ptr_p));
        }
        if(p[ptr_p]==\0)
            return false;
        if((now>=a&&now<=z&&next!=*)||(now==.&&next!=*))
        {
            if(s[ptr_s]==p[ptr_p]&&s[ptr_s+1]==\0&&p[ptr_p+1]==\0)
                return true;
            if(s[ptr_s]==p[ptr_p]||(now==.&&next!=*))
            {
                ptr_s++;
                ptr_p++;
                x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
                ptr_s--;
                ptr_p--;
                if(x==true)
                    return true;
            }
            else
            {
                return false;
            }
        }
        if(now==.&&next==*)
        {
            ptr_p+=2;
            x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
            ptr_p-=2;
            if(x==true)
                return true;
            ptr_s++;
            x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
            ptr_s--;
            if(x==true)
                return true;
        }
        if(now>=a&&now<=z&&next==*)
        {
            if(s[ptr_s]!=p[ptr_p])
            {
                ptr_p+=2;
                x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
                ptr_p-=2;
                if(x==true)
                    return true;
            }
            else
            {
                ptr_p+=2;
                ptr_s++;
                x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
                ptr_p-=2;
                ptr_s--;
                if(x==true)
                    return true;
                ptr_s++;
                x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
                ptr_s--;
                if(x==true)
                    return true;
                ptr_p+=2;
                x=isMatch(s.substr(ptr_s,s.size()-ptr_s),p.substr(ptr_p,p.size()-ptr_p));
                ptr_p-=2;
                if(x==true)
                    return true;
            }
        }
        return false;
    }
};
leedcode 10

 

算法复习:递归

标签:spl   not   +=   substr   ret   ble   gif   ext   eve   

原文地址:https://www.cnblogs.com/dzzy/p/12274354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!