【动态规划】交错重排

来源:互联网 发布:金融网络销售 编辑:程序博客网 时间:2024/05/17 00:52

问题

两个字符串,不改变原顺序,能否组成目标字符串。
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

实现和优化

实现与其他的动态规划解法没有区别,这里就不给出了。
优化方法也是典型的优化方法,可以优化成为一维数组。

0 0