件名の説明:
溶液は:モデル化されたLCSのDP [i] [j]の構築、1は完全な一致を示し、[I-1]およびpのマッチング[J-1]は、DP [I] [J] == Sを表します。状態遷移は次の通り:
pは[J-1] == '*' 時間は、または '*' が空であるとき、または '*' DPによって、この時間DPを[I] [J]と言うことですJ-1の位置に対応する文字にマッチします[I-1]〜[J]とDP [i]が状態[J-1]が決定されます。
DPによりp [J-1]!= '*' 時間、DP [I] [J]状態[I-1]〜[J-1]とS [I-1]、P [J-1]ここで、iの値が決定されます。
次のようにACコードは次のとおりです。
BOOL isMatch(ストリング S、文字列P){ int型レンズ= s.length()。 INT Lenp = p.length()。 INT DP [レンズ+ 1 ] [Lenp + 1 ]。 用(INTは iが= 0を I ++; I <=レンズ) のための(int型 J = 0 ; J <= Lenp; J ++)DP [I] [J] = 0 ; DP [ 0 ] [ 0 ] = 1 ; 以下のための(int型 J = 1; J <= Lenp; J ++)DP [ 0 ] [J] = DP [ 0 ] [J- 1 ] && P [J- 1 ] == ' * ' 。 以下のために(INT iが= 1 ; I <=レンズI ++ ) { ため(INT J = 1 ; J <= Lenpあり、j ++ ) { 場合(P [J- 1 ] == ' * ' ) { DP [I]を[ J] = MAX(DP [I]、[J- 1 ]、DP [I- 1 ] [J])。 } 他 { DP [I] [J] = DP [I- 1 ] [J- 1 ] &&(S [I- 1 ] == P [J- 1 ] | P [J- 1 ] == ' ?' )。 } } } もし(DP [レンズ] [Lenp] == 1) を返す 真。 リターン はfalse ; }