剑指OFFER 正则表达式匹配

Posted virgildevil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指OFFER 正则表达式匹配相关的知识,希望对你有一定的参考价值。

剑指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 正则表达式匹配的主要内容,如果未能解决你的问题,请参考以下文章

《剑指offer》 面试题53 :正则表达式匹配 Java

LeetCode(剑指 Offer)- 19. 正则表达式匹配

剑指Offer52:正则表达式匹配(Java)

剑指offer-正则表达式匹配

剑指offer52:正则表达式匹配

剑指offer:正则表达式匹配