# 交错字符串

给定三个字符串 s1s2s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。

两个字符串 st 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:

提示:a + b 意味着字符串 ab 连接。

 

示例 1:

输入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出:
true

示例 2:

输入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出:
false

示例 3:

输入:s1 = "", s2 = "", s3 = ""
输出:
true

 

提示:

## template ```java class Solution { public boolean isInterleave(String s1, String s2, String s3) { if ((s1.length() + s2.length()) != s3.length()) return false; boolean[][] dp = new boolean[s2.length() + 1][s1.length() + 1]; dp[0][0] = true; for (int i = 1; i <= s1.length(); i++) { dp[0][i] = dp[0][i - 1] && s1.charAt(i - 1) == s3.charAt(i - 1) ? true : false; } for (int i = 1; i <= s2.length(); i++) { dp[i][0] = dp[i - 1][0] && s2.charAt(i - 1) == s3.charAt(i - 1) ? true : false; } for (int i = 1; i < dp.length; i++) { for (int j = 1; j < dp[0].length; j++) { dp[i][j] = (dp[i][j - 1] && s1.charAt(j - 1) == s3.charAt(i + j - 1)) || (dp[i - 1][j] && s2.charAt(i - 1) == s3.charAt(i + j - 1)); } } return dp[s2.length()][s1.length()]; } } ``` ## 答案 ```java ``` ## 选项 ### A ```java ``` ### B ```java ``` ### C ```java ```