文章目录
leetcode97. 交错字符串
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
示例 1:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出: true
示例 2:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出: false
方法:动态规划
思路:
由于在匹配到s3的某个字符的时候,能否匹配是与之前是否匹配成功有关系的,因此我们使用动态规划的方法来解决。
我们**定义状态dp(i,j)表示s1的前i个字符和s2的前j个字符,能否交错组合成s3的前i+j个字符。那么我们的答案应该为dp(n1,n2)。**n1和n2为s1和s2的长度。
下面我们来找到状态转移方程,当我们判断dp(i,j)是否可以匹配的时候,我们要考虑的是两种情况:
- 如果dp(i-1,j)是可以匹配的,那么我们只需要判断此时s1[i-1] == s3[i+j-1]即可,即使用s1的字符来匹配当前s3的字符。
- 如果dp(i,j-1)是可以匹配的,那么我们只需要判断此时s2[j-1] == s3[i+j-1]即可,即使用s2的字符来匹配当前s3的字符。
因此,状态转移方程为:
d p ( i , j ) = ( d p ( i − 1 , j ) a n d ( s 1 [ i − 1 ] = s 3 [ i + j − 1 ] ) ) o r ( d p ( i , j − 1 ) a n d ( s 2 [ j − 1 ]