1. 程式人生 > >劍指offer 面試題19:正則表示式匹配

劍指offer 面試題19:正則表示式匹配

請實現一個函式用來匹配包括'.'和'*'的正則表示式。模式中的字元'.'表示任意一個字元,而'*'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配

class Solution {
public:
    bool matchcore(char *str,char* pattern)
    {
        if(*str == '\0'&&*pattern=='\0') return true;  //兩個串都完
        if(*str != '\0' && *pattern == '\0') return false;   //匹配串完但模式串沒完
        
        if(*(pattern+1)=='*')   //先要判斷模式串下一個字元是否為*
        {
            //當前兩個字元匹配   或   模式串為.*且匹配串未匹配結束   
            if(*str == *pattern ||(*pattern=='.'&&*str!='\0')) 
                return matchcore(str+1,pattern)||  //匹配串與模式串一樣,匹配串++
                matchcore(str,pattern+2)||   //匹配串與模式串不一樣,模式串+2
                matchcore(str+1,pattern+2);   //匹配完一個   要同時滿足以上三種情況
            else return matchcore(str,pattern+2);   
        }
        if(*str == *pattern || (*pattern=='.'&&*str!='\0'))   //模式串下一個不為*,當前兩串相等或匹配串為.
            return matchcore(str+1,pattern+1);
        return false;
    }
    bool match(char* str, char* pattern)
    {
        if(str==nullptr || pattern == nullptr) return false;
        return matchcore(str,pattern);
    }
};