import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s1 string字符串
* @param s2 string字符串
* @param s3 string字符串
* @return bool布尔型
*/
public boolean isInterleave (String s1, String s2, String s3) {
// write code here
int n = s1.length(), m = s2.length(), t = s3.length();
if (n + m != t) {
return false;
}
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= m; ++j) {
int p = i + j - 1;
if (i > 0) {
f[i][j] = f[i][j] || (f[i - 1][j] && s1.charAt(i - 1) == s3.charAt(p));
}
if (j > 0) {
f[i][j] = f[i][j] || (f[i][j - 1] && s2.charAt(j - 1) == s3.charAt(p));
}
}
}
return f[n][m];
}
}
Java语言。
该题考察的知识点是动态规划
给定输入的三个字符串s1、s2、s3,我们需要判断s3是否由s1和s2交错组成。这里使用动态规划思想,定义二维数组dp[i][j]表示s1的前i个字符和s2的前j个字符是否能够组成s3的前i+j个字符。根据题目要求,我们需要判断最后的状态dp[n][m]是否为true,其中n是s1的长度,m是s2的长度。如果dp[n][m]为true,则说明s3可以由s1和s2交错组成;否则,不能。

京公网安备 11010502036488号