剑指offer51-正则表达式匹配

题目描述

请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配

   bool match(char* str, char* pattern)
    {
        //
        
        if(str==NULL&&pattern==NULL) return false;
        return matchPattern(str,pattern);
    }
    bool matchPattern(char*str,char*pattern)
    {
        if(*str==''&&*pattern=='') return true;
        if(*str!=''&&*pattern=='') return false;
        if(*(pattern+1)=='*')
        {
            //!
            if(*pattern==*str||(*str!=''&&*pattern=='.'))//1至n匹配
                return matchPattern(str+1,pattern)||matchPattern(str,pattern+2);
         //   if
           //    return matchPattern(str+1,pattern+2);
            if(*pattern!=*str)//0匹配
                return matchPattern(str,pattern+2);
        }
        if(*pattern=='.')
        {
            if(*str=='')return false;
            return matchPattern(str+1,pattern+1);
        }
        if(*str==*pattern)
        return matchPattern(str+1,pattern+1);
        return false;
    }

原文地址:https://www.cnblogs.com/trouble-easy/p/12980967.html