题解 | #交织子序列# java
交织子序列
https://www.nowcoder.com/practice/3885d44d77f34f1c89dc05ac40207f5d
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param x string字符串
* @param t string字符串
* @return bool布尔型
*/
public boolean isInterleave (String s, String x, String t) {
// write code here
int m = s.length();
int n = x.length();
int len = t.length();
if (m + n != len) {
return false;
}
boolean[][] dp = new boolean[m + 1][n + 1];
dp[0][0] = true;
// 初始化 dp 数组的第一行和第一列
for (int i = 1; i <= m; ++i) {
dp[i][0] = (s.charAt(i - 1) == t.charAt(i - 1)) && dp[i - 1][0];
}
for (int j = 1; j <= n; ++j) {
dp[0][j] = (x.charAt(j - 1) == t.charAt(j - 1)) && dp[0][j - 1];
}
// 动态规划计算 dp 数组
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
if ((s.charAt(i - 1) == t.charAt(i + j - 1) && dp[i - 1][j]) ||
(x.charAt(j - 1) == t.charAt(i + j - 1) && dp[i][j - 1])) {
dp[i][j] = true;
}
}
}
return dp[m][n];
}
}
该代码使用的编程语言是Java。
该题考察的知识点是动态规划(Dynamic Programming)。
代码的解释如下:
isInterleave方法用于判断字符串t是否由字符串s和x交错组成。- 首先,通过比较
s、x和t的长度来确定是否满足交错组合的条件。如果长度不符合,则直接返回false。 - 创建一个二维布尔型数组
dp,dp[i][j]表示字符串s的前i个字符和字符串x的前j个字符是否能够组成字符串t的前i + j个字符。 - 初始化
dp数组的第一行和第一列。dp[0][0]记录空字符串的情况为真。然后,依次遍历s和x的字符,并根据和t对应位置的字符是否匹配来更新dp数组的值。 - 通过动态规划计算剩余的
dp值,其中dp[i][j]的值取决于dp[i-1][j]和dp[i][j-1]的值,并且与当前字符是否匹配有关。 - 最后返回
dp[m][n],表示整个字符串t是否能够由s和x交错组成。

