1. 程式人生 > >【動態規劃】交錯重排

【動態規劃】交錯重排

問題

兩個字串,不改變原順序,能否組成目標字串。
eg:
str1:ABC
str2:123
aim:A12BC3、123ABC、1A2B3C、………

解法

動態規劃解:
dp[i][j]表示str1[0…i-1]和str2[0…j-1]能否組成aim[0…i+j-1]長度的字串.
狀態轉移方程:
dp[0][j] = str2[0…j] == aim[0…j] ? 1:0
dp[i][0] = str1[0…i] == aim[0…i] ? 1:0
dp[i][j] = str1[i] == aim[i+j-1] && ap[i-1][j] == 1 或 str2[j] == aim[i+j-1] && ap[i][j-1] == 1

實現和優化

實現與其他的動態規劃解法沒有區別,這裡就不給出了。
優化方法也是典型的優化方法,可以優化成為一維陣列。