剑指offer---正则表达式匹配

//递归做的 开始用动态规划做 类似通配符问题 总感觉有问题 答案里面用dp做的多多少少有点问题
//估计是我水平太低
//只是其中一个带符号!
class Solution 
{
public:
    bool match(char* str, char* pattern)
    {
        if(str==NULL||pattern==NULL)
        {
            return false;
        }
        return digui(str,pattern);
    }
    bool digui(char* str,char* pattern)
    {
        //出口条件
        if(*str=='\0'&&*pattern=='\0') return true;
        
        //因为'.'和'*'都是在pattern中 所以以下这种情况必然为FALSE
        if(*str!='\0'&&*pattern=='\0') return false;
        
        
        //如果有星号 看星号前面这个元素是否相等
        if(*(pattern+1)=='*')
        {
            if((*pattern==*str)||(*pattern=='.'&&*str!='\0'))
            {
                //星号前面的相等了
                return (digui(str,pattern+2)||digui(str+1,pattern));
                //为什么不是digui(str+1,pattern+1) 
                //因为字母加星号是有可能对应str中连续多个元素的
            }
            else
            {
                //不一样就很简单了
                return digui(str,pattern+2);
            }
        }
        
        if(*str==*pattern||(*pattern='.'&&*str!='\0'))
        {
            return digui(str+1,pattern+1);
        }
        
        return false;
    }
   
};

 

posted @ 2017-08-04 23:49  双马尾是老公的方向盘  阅读(149)  评论(0编辑  收藏  举报