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
.
描述
判断字符串 s3
是否由 s1
与 s2
交错组成(不一定按固定间隔交错)
分析
用动态规划的思想,以一个二维数组来存储判断信息
假设下标从 1
开始:f[i][j]
其中 i
代表 s1
字符串中选取的字符数,j
代表 s2
字符串中选取的字符数f[i][j]
为 true
时,代表 s3
长度为 i + j
时符合题意
判断 f[i][j]
是否为 true
时,要求其满足:
s1
取第i
个字符进行判断,当s3[i + j] == s1[i]
时,再判断之前的i - 1 + j
个字符是否符合条件,即f[i - 1][j]
是否为true
s2
取第j
个字符进行判断,当s3[i + j] == s2[j]
时,再判断之前的i + j - 1
个字符是否符合条件,即f[i][j - 1]
是否为true
代码
1 | public class Solution { |