1. 程式人生 > >劍指offer____正則表示式匹配

劍指offer____正則表示式匹配

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

class Solution {
public:
    /*
    思路
  如果模式串此時是'.',那麼只需要模式串與匹配串都往後移動一個位置即可
  如果現在這位的字元能匹配且且模式串的下一位是'*',我們則需要分情況討論
1.匹配串往後移動1位,模式串跳過'*'
2.匹配串往後移動1位,模式串不動
3.匹配串不動,模式串跳過'*'
    */
        bool match(char* str, char* pattern)
        {
            if(str==nullptr || pattern==nullptr)
                return false;
            return matchCore(str,pattern);
        }
        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+2)||matchCore(str+1,pattern)||matchCore(str,pattern+2);
                else
                    return matchCore(str,pattern+2);
            }
            if(*str==*pattern || (*pattern=='.' && *str!='\0'))
                return matchCore(str+1,pattern+1);
            return false;
        }

};