首页 > 代码库 > 剑指offer---正则表达式匹配

剑指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;
    }
   
};

 

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