Всем доброго времени суток, есть массив состоящий из строк к примеру
arr = ["zone", "abigail", "theta", "form", "libe", "zas"]
нужно создать функцию которая на основе данного ей массива выводила бы строку с самой длинной комбинацией строк идущих подряд, но кол-во строк ограничено в параметре функции. Пример :
LongestConc(["zone", "abigail", "theta", "form", "libe", "zas"], 2) == "abigailtheta"
Тут как видно ограничение по строкам 2 , то есть если посчитать все длинны строк в массиве выходит [4,7,5,4,4,3] ну и самая длинная комбинация из 2 выходит из чисел 7+5 = 12 то есть - abigailtheta. Вот еще пример:
LongestConc(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 3) == "ixoyx3452zzzzzzzzzzzz"
Так вот , я не могу придумать как это осуществить. Главная проблема что комбинация должна идти подряд, иначе , я бы уже сделал(просто отсортировав массив по длине строк и в зависимости от заданного числа, просуммировал бы строки в цикле).
Как-то так, навскидку.
let arr = ["zone", "abigail", "theta", "form", "libe", "zas"];
function longestString(arr, k) {
if (k > arr.length) {
console.error('array is too short');
return '';
}
let longest = '';
for (let i = 0; i <= arr.length - k; i++) {
let current = arr.slice(i, i + k).join('');
if (current.length > longest.length) {
longest = current;
}
}
return longest;
}
console.log(longestString(arr, 2));
console.log(longestString(["it","wkppv","ixoyx", "3452", "zzzzzzzzzzzz"], 3));
Вроде проще всего, что было до. Хотя бы внешне
const arr = ["it", "wkppv", "ixoyx", "3452", "zzzzzzzzzzzz"];
function count(a, l) {
var str = '';
for (let i = 0; i < a.length; i++) {
var s = '';
for (let j = 0; j < l; j++) {
if (typeof a[i + j] !== "undefined") {
s += a[j + i];
}
}
if (s.length > str.length) {
str = s;
}
}
return str;
}
Пояснение: в конце будут лишние строки из двух, одного менее элементов массива. Так как длина больше 0 всегда они не влияют на р-т
Если будет не понятно что происходит - объясню в комнетариях)
'use scrict';
var arr = ["zone", "abigail", "theta", "form", "libe", "zas"];
function LongestConc(arr, number){
//Сначало узнаем самую длинную строку из всех возможных
var theMostLonger = 0;
for(var i=0;i<arr.length - number;i++){
//Каждый раз очищаем предыдущий запроси устанавливаем новых последующих елементов в массиве
var length = 0,
startPosition = i;
//Здесь мы добавляем длинну строку от начального елемента до конца значения number
for(var j=0;j<number;j++){
length += arr[startPosition++].length;
};
//Если больше - устанавливаем новую саму длинную длинну
if(length > theMostLonger) theMostLonger = length;
};
//Дальше запустим цикл который уже опеределит эти самые строки и слепит их воедино вернув нам значние
for(var i=0;i<arr.length - number;i++){
var length = 0,
startPosition = i;
for(var j=0;j<number;j++){
length += arr[startPosition++].length;
};
if(length == theMostLonger){
var returnString = '';
for(var j=0;j<number;j++){
returnString += arr[i++];
}
return returnString;
}
}
};
console.log(LongestConc(arr, 3));
console.log(LongestConc(arr, 2));
console.log(LongestConc(arr, 4));
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня есть переменная $socket которая и содержит мой сокет, есть основной поток для обработки событий сокета и нужен другой поток для отправки...
Гостевая книга на сайте где можно оставить пост как гостю так и зарегпользователю
Всем здарова, срочно нужна помощьУ меня реализована простая авторизация, в бд хранится e-mail, и хэш пароля