[ダイナミックプログラミング]は97インターリーブ文字列をleetcode

問題:https://leetcode.com/problems/interleaving-string/

        私はメモリの検索を使用する方法は、直接の試みは、よりゆっくりと、マッチングのプロセスをシミュレートします。

クラスのソリューション{
 パブリック
    ベクトル <ベクトル<ベクトル< int型 >>> DP;
    BOOL DFS(CONST  文字列&S1、CONST  文字列&S2、CONST  文字列&S3、int型 I、int型 J、int型K)
    { 
        もし(K == s3.size())
        { 
            場合(I == s1.size() && jは== s2.size())を返す 返す ; 
        } 
        であれば(DP [I] [J] [K]!= 2返すDP [I] [J] [k]を、
        もし(I <s1.size()&& J <s2.size()&& S1 [i]は== S3 [K] && S2 [J] == S3 [K])
        { 
            戻り DP [I] [J] [ K] = DFS(S1、S2、S3、I + 1、J、K + 1)|| DFS(S1、S2、S3、I、J + 1、K + 1 )。
        } 
        そう であれば(私はs1.size()&& S1 [i]は== < S3 [K])
        { 
            戻り DFS(S1、S2、S3、I + = DP [I] [J] [K] 1、J K + 1 )。
        } 
        そう であれば(J <s2.size()&& S2 [J] == S3 [K])
        { 
            リターンDP [I] [J] [K] = DFS(S1、S2、S3、I、J + 1、K + 1 )。
        } 
        戻り DP [I] [J] [k]は= 
    } 
    BOOL isInterleave(ストリング S1、 S2、ストリングS3){ 
        dp.resize(s1.size() + 1、ベクトル<ベクトル< INT >>(s2.size()+ 1、ベクトル< INT >(s3.size ()+ 12 )))。
        戻り DFS(S1、S2、S3、000 ); 
    } 
}。

 

おすすめ

転載: www.cnblogs.com/fish1996/p/11285067.html