我有一个字符串数组array_strings,我想从列表中获取x个连续值的最大长度并返回一个字符串。我已经尝试过使用此代码,但无法正常工作。
var myArr = ['we', 'make', 'the', 'best', 'dishes', 'in', 'cooking', 'class'];
x = 2;
function myFunc(array_strings, x) {
// your code
let val = '',
y = 0;
array_strings.sort((a, b) => {
return a.length < b.length
});
if (array_strings.length > 0) {
while (x) {
val += array_strings[y];
y++;
x--;
}
}
return val;
}
console.log(myFunc(myArr, x))
// expected output 'cookingclass'
关于排序,我不能满足连续的顺序。我要去哪里错了?
答案 0 :(得分:0)
为简单起见,首先获取x
个连续项目的所有可能值。
function longestConsecutives(arr, x) {
var consecutives = [];
for (var i=0; i<arr.length-x; i++)
consecutives.push(arr.slice(i, x).join(''));
,然后搜索其中长度最大的一个:
var longest = consecutives[0];
for (var i=1; i<consecutives.length; i++)
if (consecutives[i].length > longest.length)
longest = consecutives[i];
return longest;
}
还有一种更有效的方法来找到结果,看看this以获得启发。
答案 1 :(得分:0)
我认为没有理由对此进行排序。您可以在数组上移动x
长度的滑动窗口,并跟踪看到的最长序列:
let array_strings = ['we', 'make', 'the', 'best', 'dishes', 'in', 'cooking', 'class']
function findMax(array_strings, x){
let max_index = 0, max_length = 0
for (let i= 0; i < array_strings.length - x + 1; i++){
let length = array_strings.slice(i, i+x).reduce((l, c) => l + c.length, 0)
if (length > max_length) {
max_index = i,
max_length = length
}
}
return array_strings.slice(max_index, max_index + x)
}
console.log(findMax(array_strings,2))
console.log(findMax(array_strings,3))
console.log(findMax(array_strings,4))
答案 2 :(得分:0)
滚动总和O(n)解决方案:
function findLongestConsec(arr, l) {
var curSum = array_strings.slice(0, l).map(ele => ele.length).reduce((a, b) => a+b);
var curMax = curSum;
var curMaxIndex = 0;
for (var i = 1; i < arr.length - l + 1; i++) {
curSum = curMax - arr[i-1].length + arr[i+l-1].length;
if (curSum > curMax) {
curMax = curSum;
curMaxIndex = i;
}
}
return arr.slice(curMaxIndex, curMaxIndex + l).join('');
}
以前的解决方案都涉及字符串连接。我不认为每次都值得这样做。我们只需要跟踪最长子数组的起始索引即可。
答案 3 :(得分:0)
尝试一下:
arr = ['we', 'make', 'the', 'best', 'dishes', 'in', 'cooking', 'class']
x = 2
var sorting = function (array_strings, items) {
// your code
let val = '', y = 0;
const sort = array_strings.sort((a, b) => a.length < b.length);
console.log({sort});
if (arr.length > 0){
while (items){
val += array_strings[y];
y++;
items--;
}
}
return val;
}
var s = sorting(arr,x);
console.log({s});