【JavaScript 算法】最长公共子序列:字符串问题的经典解法
warning:
这篇文章距离上次修改已过216天,其中的内容可能已经有所变动。
function longestCommonSubsequence(text1, text2) {
let m = text1.length;
let n = text2.length;
let dp = new Array(m + 1).fill(0).map(() => new Array(n + 1).fill(0));
for (let i = 1; i <= m; i++) {
for (let j = 1; j <= n; j++) {
if (text1[i - 1] === text2[j - 1]) {
dp[i][j] = 1 + dp[i - 1][j - 1];
} else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
return dp[m][n];
}
// 示例
console.log(longestCommonSubsequence("abcde", "ace")); // 输出应该是 3
这段代码首先定义了一个函数longestCommonSubsequence
,它接受两个字符串参数text1
和text2
,并返回它们的最长公共子序列的长度。函数内部,我们使用动态规划的方法创建了一个二维数组dp
来存储中间结果。然后,我们遍历字符串text1
和text2
的所有可能的子序列,并根据子序列是否相同来更新dp
数组。最终,dp[m][n]
存储的就是text1
和text2
的最长公共子序列的长度。最后,我们打印出两个字符串的最长公共子序列长度。
评论已关闭