Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.
Example 1:
1 | Input: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac" |
Example 2:
1 | Input: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc" |
题解
使用动态规划求解。
首先我们分解子问题。如果s3是s1和s2的交错字符串的话,那么一定有以下的一种情况
- s3的最后一位和s2的最后一位相同,此时s3前边的子串(除去最后一位)一定是s2的前边的子串与s1的交错字符串。
- s3的最后一位和s1的最后一位相同,此时s3前边的子串(除去最后一位)一定是s1的前边的子串与s2的交错字符串。
这个很容易想到,因为构造出交错的字符串的时候肯定是从s1选1个char,又从s2选1个char,所以如果当前是交错的串的话,去掉最后一位相同的位之后,前边的串肯定也是根据这个规则构造来的,所以也是交错的字符串。
因此我们可以写出迭代方程:
基于此方程我们写出如下的解:
Solution
1 | class Solution { |