對於三個字串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是否...