[I] [Jは、2次元アレイDP、DPを定義 ] i番目のSの文字とpマッチングされる前に、最初のj個の文字を表し、
DP [I] [J]として算出される
第一のセットDP [0] [0 ]一致した2つのヌル文字ため、真である
ような文字が表示されない前に[DP、私は= 0の場合、最初のj個の文字pを一致させるために、空の文字列で表され、我々は== P [j]を期待しますI] [J] = P [ J] == *およびDP [I]、[J-2]
の場合は[I] == P [J ] 次に、ダイレクトルックI-1、J-1、と一致しません、DP [I] [J] = DP [I-1]〜[J-1]
1は、ライン上に一致させることが可能と最後は、治療すべき状況があり、二つの選択肢があり、限り、この文字を一度に前の文字を繰り返さない、または
しないの前に文字、DP [I] [J- 2]
を繰り返し、それは条件pを満足する必要がある[J-1] == S [I] またはp [J-1] == ' '、DP [I-1] [ j]は
、最後に戻るDP [M] [n]の結果と一致することができる
クラスソリューション:
DEF IsMatch(セルフ、S:STR、P:STR)を- > BOOL:
S、P = '#' + S、 '#' P +
M、N- = LEN(S)、(P)lenの
DP = [偽] * Nレンジ(M)で_用]
DP [0] [0] = Trueの
範囲でIのための(M):
(N-1)のためにJ帯:
IF I == 0:
DP [I] [J] = J> 1およびP [J] == '*'およびDP [I]、[J-2]
のelif P [ J]の[S [I]、] '':
DP [I] [J] DP = [1-I] [J-1]。
ELIF P [J] == '*':
DP [I] [J ] = J> 1とDP [I]、[J-2]又はP [J-1]の[S [I]、]とDP [I-1]〜[J]。。 ''
他:
DP [I] [ J] = Falseの
戻りDP [-1] [ - 1]
著者:loick
リンクします。https://leetcode-cn.com/problems/zheng-ze-biao-da-shi-pi-pei-lcof/solution/dong -tai-guiの華-ER-魏集-ZU・バイ・loick /
ソース:滞在ボタン(LeetCode)
著者によって予約の著作権。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。