【发布时间】:2020-04-18 18:01:36
【问题描述】:
我正在查看此 leetcode question,但在完成天真的方法时遇到了问题。我能够找到最佳解决方案here。但我不确定我的幼稚尝试有什么问题。
问题如下:
给定两个整数数组 A 和 B,返回一个数组的最大长度 出现在两个数组中的子数组。
示例:
输入:A:[1,2,3,2,1] B:[3,2,1,4,7]输出:3
解释:最大长度的重复子数组为[3, 2, 1]。
这是我当前的代码:
var findLength = function(a, b) {
if (a.length === 0 || b.length === 0) {
return 0;
}
let aWithoutFinalNumber = a.slice(0, a.length - 1);
let bWithoutFinalNumber = b.slice(0, b.length - 1);
let aFinalNumber = a[a.length - 1];
let bFinalNumber = b[b.length - 1];
// matching numbers
if(aFinalNumber === bFinalNumber) {
return 1 + findLength(aWithoutFinalNumber, bWithoutFinalNumber);
} else { // mismatch. Compete to find the maximum length.
return Math.max(findLength(a, bWithoutFinalNumber), findLength(aWithoutFinalNumber, b));
}
};
我的解决方案通过了几个测试用例,但在 a: [0,1,1,1,1] b: [1,0,1,0,1] 这样的情况下失败了。对我的错误的任何见解将不胜感激!
【问题讨论】:
标签: javascript algorithm dynamic-programming