ダイナミックプログラミング(8)

 

[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)
著者によって予約の著作権。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。

おすすめ

転載: www.cnblogs.com/topass123/p/12637561.html