难度:困难
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
示例 1:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出: true
示例 2:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出: false
题目分析:
这个是两个字符串组合,相对于原来的顺序是不能乱序的。比如字符串“a”和“cd”,它可以组合为“acd”,“cad”,“cda”,但是不能组合为“dca”等。这道题使用DP,状态转换方程较难得出,分析一下。如下面所示,当三个字符串都为空的时候,那显然是可以任意组合的。当s1和s2其中一个为空的时候,那需要不为空的那个和s3对比。接下来我们讨论以下正常情况下的组合,因为可能会出现两个字符串为空,或者一个字符串为空的情况,所以我们考虑0,0这个位置表示为空,以第一行为例当s[0]为空时,那么比较s[2]和s[3],第一个都为空