正規表現のマッチング - 文字列オファー安全性を証明するために、

タイトル説明

備えるに「と一致する機能」と「*」正規表現を実装します。モード文字が「」 『*』任意の1つの文字を表し前の文字が(0時間を含む)任意の回数現れることができることを示しています。この問題では、試合全体のパターンが文字列のすべての文字に一致しています。たとえば、文字列「AAA」モードと「AA」と「AB * AC *」試合が、「aa.a」と「abが*」一致しません。

分析

ポインタの動き。

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

:第二のモードは、文字「*」である場合と
モードマッチングの三種類が存在してもよい:
文字をシフトモードの後1、2、X *に対応する無視され、
図2に示すように、文字列の移動、シフトパターンの後に2 ;文字、X *は、文字の等価一致
*数と一致するため、図3に示すように、1つの文字列、次の文字の場所と一致し続ける同じパターンを移動します。

コード

class Solution {
public:
    bool match(char* str, char* pattern)
    {
        if (*str == '\0' && *pattern == '\0')
            return true;
        // 1.匹配带*正则(包括非贪心情况)
        if (*str == *pattern || (*pattern == '.' && *str != '\0'))
        {
            // 不是正则式
            if (*(pattern + 1) != '*')
                return match(++str, ++pattern);
            // 是正则式
            // 将*字符的匹配一分为二的处理
            return match(str, pattern + 2) || match(str + 1, pattern);
        }
        // 消去无用带*字符
        else if (*(pattern + 1) == '*')
        {
            pattern += 2;
            return match(str, pattern);
        }
        return false;
    }
};

 

公開された35元の記事 ウォンの賞賛6 ビュー6691

おすすめ

転載: blog.csdn.net/qq_35413770/article/details/105131948