--52オファーはシリーズを受賞。正規表現のマッチ

Q:「」 『マッチングに備えるに機能を実装し、正規表現で』。モード文字「」いずれかの文字が『は(0時間を含む)任意の回数とすることができる』文字の前に示されています。この問題では、試合全体のパターンが文字列のすべての文字に一致しています。例えば、文字列「AAA」モードと「AA」と「AB AC A」試合が、「aa.a」と「abが*」一致しない
Aを:本当にこの質問......多くの問題を、一度私を聞かせてクラッシュ。あなたは、サブライトの場合のように再帰的には、壁に何度も実行して、最終的に再帰を使用することを選択します従わない場合は良くなります。

モードが「*」二番目の文字ではない場合である:
1、パターンの最初の文字と、最初の文字が文字列と文字、その後、後方のモード、残りの試合に一致する場合。
最初の文字と、最初の文字パターンが位相と一致しない場合2は、直接、falseを返します。

二番目の文字のモードがある場合には「*」です。
最初の文字列パターンは、2つの文字が一致し続けるモード移行後、最初の文字と一致しない場合。最初の文字パターンマッチを有する第1の文字列は、3つの可能性のあるマッチ:(三つの方法のいずれか、または再帰的)が存在する場合
、X *は無視さに対応する1の後に、2文字モードシフト、
文字列の後2、キャラクタ・モード・シフト2の後に1つの文字を移動する;
3、*は番号と一致するので、1つの文字列、次の文字にマッチし続ける同じパターンを移動させます。

    bool match(char* str, char* pattern)
    {
        if (*str == '\0' && *pattern == '\0')
            return true;
        if (*str != '\0' && *pattern == '\0')
            return false;
        //if the next character in pattern is not '*'
        if (*(pattern+1) != '*')
        {
            if (*str == *pattern || (*str != '\0' && *pattern == '.'))
                return match(str+1, pattern+1);
            else
                return false;
        }
        //if the next character is '*'
        else
        {
            if (*str == *pattern || (*str != '\0' && *pattern == '.'))
                return match(str, pattern+2) || match(str+1, pattern);
            else
                return match(str, pattern+2);
        }
    }

PSは、strで決定された空である* STR = '\ 0' または使用しないstrの== nullptr str.length()== 0

おすすめ

転載: www.cnblogs.com/xym4869/p/12359023.html
おすすめ