正規表現のマッチング(安全offer_19を証明するために)

タイトル説明


備えるに「と一致する機能」と「*」正規表現を実装します。モード文字が「」 『*』任意の1つの文字を表し前の文字が(0時間を含む)任意の回数現れることができることを示しています。

この問題では、試合はすべての文字がパターン全体の文字と一致しています。たとえば、文字列「AAA」モードと「AA」と「AB * AC *」試合が、「aa.a」と「abが*」一致しません。

問題解決のためのアイデア


*「は前の文字を繰り返すために使用されている「は任意の文字を作るために使用されている」」、注意すべきです。これら2種類のエフェクト、ことはできません「」役割や「*」アナロジーは、先行する文字として、それを繰り返します。

パブリック ブールマッチ(CHAR [] STR、CHAR []パターン){

    INT、M = str.length、N = pattern.length。
    ブール [] [] DP = 新しい ブール [M + 1] [N + 1 ]。

    DP [ 0] [0] = 以下のためにINT I 1 =; I <= N; I ++ 場合(パターン[I - 1] == '*'を
            DP [ 0] [I] = DP [0] [I - 2 ]。

    以下のためにINT I 1 =、iが<= M; I ++ のためのINT J = 1; J <= N; J ++ 場合(STR [I - 1] ==パターン[J - 1] ||パターン[J - 1] == '' 
                DP [I] [J] = DP [I - 1] [J - 1 ]。
            他の 場合(パターン[J - 1] == '*' 場合(パターン[J - 2] == STR [I - 1] ||パターン[J - 2] '' == ){
                    DP [I] [J] | = DP [I] [J - 1]; // 単一のAとして*カウント 
                    DP [I] [J] | = DP [I - 1] [J]。// 複数のAとして*カウント 
                    DP [I] [J] | = DP [I] [J - 2]。// 空のように*カウント 
                } 他の
                    DP [I] [J] = DP [I] [J - 2]。   // 空のように*のみカウント

    戻りDP [M] [N]。
}

おすすめ

転載: www.cnblogs.com/ziytong/p/12114952.html