码迷,mamicode.com
首页 > 其他好文 > 详细

剑指OFFER 正则表达式匹配

时间:2020-02-01 10:56:49      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:string   动态   修改   offer   难度   次数   博客   cpp   ||   

剑指OFFER 正则表达式匹配

写这道题花了很长的时间,提交了无数次,果然是HARD的难度.搜了别人的博客,有两种解法,一种是递归,一种是动态规划.目前我只实现了递归,代码也有点乱,蛮多边界条件需要考虑的.

递归题解

class Solution {
public:
    string s;
    string p;
    int s_size;
    int p_size;

    bool ok = false; 

    void recur(int sp,int pp)
    {
        if(sp >= s_size)
        {
            if(pp < p_size && p[pp+1]=='*'){
                recur(sp,pp+2);
                return;
            }
            if(pp >= p_size){
                ok = true;
                return;
            }
            return;
        }
        
        if(pp >= p_size){
            return;
        }

        if(pp+1<p_size && p[pp+1] == '*'){
            
            if(p[pp]=='.' || s[sp]==p[pp])
            recur(sp+1,pp);  // * 令该字符出现1次,多次递归就相当于出现多次了
            
            recur(sp,pp+2);// * 令该字符为出现次数为0
        }


        if(p[pp]=='.' || s[sp]==p[pp]){
            recur(sp+1,pp+1);
        }
    }

    bool isMatch(string s_str, string p_str) {
        s_size = s_str.size();
        p_size = p_str.size();
        
        if(s_size == 0 && p_size == 0)return true;
        if(s_size != 0 && p_size == 0)return false;
        
        ok = false;
        s = s_str;
        p = p_str;

        recur(0,0);
        return ok;
    }
};

注:这是在leetcode上提交的代码,稍加修改即可通过剑指OFFER的OJ

剑指OFFER 正则表达式匹配

标签:string   动态   修改   offer   难度   次数   博客   cpp   ||   

原文地址:https://www.cnblogs.com/virgildevil/p/12247553.html

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