LeetCode 97. Interleaving String
题目描述:
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.
For example, Given: s1 =
"aabcc"
, s2 ="dbbca"
,When s3 =
"aadbbcbcac"
, return true. When s3 ="aadbbbaccc"
, return false.
使用动态规划, dp[i][j]
代表s1的前i个字符与s2的前j个字符是否能组成s3的前i+j个字符.
显然dp[0][0]
能组成空字符串, 所以dp[0][0]
为真. 而对于i=0
和j=0
的情况来说, 直接比较s1的前i个字符或s2的前j个字符与s3是否相同就可以了.
接下来的dp[i][j]
分为两种情况:
s3[i+j-1]
的字符与s1[i-1]
相同, 代表s3[i+j-1]
的字符可以从s1中取得. 此时dp[i][j]
为真则要求dp[i-1][j]
为真.s3[i+j-1]
的字符与s2[j-1]
相同, 代表s3[i+j-1]
的字符可以从s2中取得. 此时dp[i][j]
为真则要求dp[i][j-1]
为真.
递推方程为
1 | dp[i][j] = (dp[i - 1][j] && s3[i + j - 1] == s1[i - 1]) || (dp[i][j - 1] && s3[i + j - 1] == s2[j - 1]) |
1 | class Solution { |