問題: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 ()+ 1、2 )))。 戻り DFS(S1、S2、S3、0、0、0 ); } }。