字串交錯組成 牛客網,動態規劃

2021-09-26 06:28:56 字數 1084 閱讀 1219

對於三個字串a,b,c。我們稱c由a和b交錯組成當且僅當c包含且僅包含a,b中所有字元,且對應的順序不改變。請編寫乙個高效演算法,判斷c串是否由a和b交錯組成。

給定三個字串a,b和c,及他們的長度。請返回乙個bool值,代表c是否由a和b交錯組成。保證三個串的長度均小於等於100。

測試樣例:

「abc」,3,「12c」,3,「a12bcc」,6

返回:true

思路:設dp[i][j]為長度為i的字串a[0,…,i-1]和長度為j的字串b[0,…,j-1]能否組成長度為i+j的目標字串c[0,…,i+j-1]。

分析可得dp[i][j]可能由dp[i-1][j]與dp[i][j-1]轉化過來,接下來仔細分析一下為什麼?

dp[i][j]表示當前c的第i+j-1位字元肯定是由a的第i-1位字元或者b的第j-1位字元組成的。

①所以,如果c[i+j-1]==a[i-1]&&dp[i-1][j]==true,這時說明c的前i+j位字元可由a的前i位和b的前j位字元有序組成且當前c[i+j-1]是來自a[i-1],即dp[i][j]=true。

②如果c[i+j-1]==b[j-1]&&dp[i][j-1]==true,這時說明c的前i+j位字元可由a的前i位和b的前j位字元有序組成且當前c[i+j-1]來自b[j-1],即dp[i][j]=true。

如果以上兩種情況都不滿足,說明c的前i+j位字元不能由a的前i位和b的前j位字元有序組成,dp[i][j]=false;

注意初始條件dp[0][0]=true,和dp[0][1],dp[1][0]。

**:

class

mixture

else

if(b[j-1]

==c[i+j-1]

&&dp[i]

[j-1])

else

dp[i]

[j]=

false;}

}return dp[n]

[m];}}

;

字串交錯組成

問題描述 對於三個字串a,b,c。我們稱c由a和b交錯組成當且僅當c包含且僅包含a,b中所有字元,且對應的順序不改變。請編寫乙個高效演算法,判斷c串是否由a和b交錯組成。給定三個字串a,b和c,及他們的長度。請返回乙個bool值,代表c是否由a和b交錯組成。保證三個串的長度均小於等於100。測試樣例...

字串交錯組成

對於三個字串a,b,c。我們稱c由a和b交錯組成當且僅當c包含且僅包含a,b中所有字元,且對應的順序不改變。請編寫乙個高效演算法,判斷c串是否由a和b交錯組成。給定三個字串a,b和c,及他們的長度。請返回乙個bool值,代表c是否由a和b交錯組成。保證三個串的長度均小於等於100。測試樣例 abc ...

字串的交錯組成

題 目 給定三個字串str1 str2和aim。如果aim包含且僅包含來 自str1和str2的所有字 符,而且在aim中屬於str1的字元之間保持原來在str1中的順序,屬於str2的字元 之間保持原來在str2中的順序,那麼稱aim是str1和str2的交錯組成。實現 乙個函 數,判斷aim是否...