タイトル説明
備えるに「と一致する機能」と「*」正規表現を実装します。モード文字が「」 『*』任意の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]。 }