描述
给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。
样例
样例 1:
输入:
"aabcc"
"dbbca"
"aadbbcbcac"
输出:
true
样例2:
输入:
""
""
"1"
输出:
false
样例3:
输入:
"aabcc"
"dbbca"
"aadbbbaccc"
输出:
false
代码
这道题其实就是一道很基础的动态规划问题:
public class Solution {
/**
* @param s1: A string
* @param s2: A string
* @param s3: A string
* @return: Determine whether s3 is formed by interleaving of s1 and s2
*/
public boolean isInterleave(String s1, String s2, String s3) {
// write your code here
int m = s1.length(), n = s2.length(), k = s3.length();
if (m + n != k)
return false;
boolean[][] table = new boolean[m + 1][n + 1];
table[0][0] = true;
for (int i = 1; i <= m; i++) {
table[i][0] = (s1.charAt(i-1)==s3.charAt(i-1)) && table[i-1][0];
}
for (int j = 1; j <= n; j++) {
table[0][j] = (s2.charAt(j-1) == s3.charAt(j-1)) && table[0][j-1];
}
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if ((s3.charAt(i+j-1)==s1.charAt(i-1) && table[i-1][j]) ||
(s3.charAt(i+j-1)==s2.charAt(j-1) && table[i][j-1]))
table[i][j] = true;
}
}
return table[m][n];
}
}