問題:https://leetcode.com/problems/scramble-string/
メモリ検索。すべての可能な為替の状況で右を見つけます。
クラスのソリューション{ パブリック: unordered_map < 文字列、ブール > DP; BOOL isScramble(ストリング S1、ストリングS2){ 場合(dp.find(S1 + " " + S2)=!dp.end()) 戻り DP [S1 + " " + S2]。 INT、N = s1.size()。 もし(S1 == S2)を返す 真。 ベクトル < int型 >のカウント(256、0); 用(int型 iは= 0 ; iが(s1.sizeを<); iが++ ){ [i]は[S1]カウント ++ 。 [S2 [i]は]カウント - ; } ための(自動C:カウント){ 場合(!C = 0)を返す 偽。 } BOOL RES = 偽。 以下のために(int型 i = 1 ; iがn <; iは++ ){ RESを | =((isScramble(s1.substr(0、I)、s2.substr(N - I))&& isScramble(s2.substr(0、N - I)、s1.substr(I)))
|| (isScramble(s1.substr(0、I)、s2.substr(0、I))&& isScramble(s1.substr(I)、s2.substr(I))))。 } 戻り DP [S1 + " " + S2] =のRES。 } }。