JavaScript самая длинная комбинация из k строк идущих подряд.

217
24 июля 2017, 16:25

Всем доброго времени суток, есть массив состоящий из строк к примеру

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"

Так вот , я не могу придумать как это осуществить. Главная проблема что комбинация должна идти подряд, иначе , я бы уже сделал(просто отсортировав массив по длине строк и в зависимости от заданного числа, просуммировал бы строки в цикле).

Answer 1

Как-то так, навскидку.

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));

Answer 2

Вроде проще всего, что было до. Хотя бы внешне

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 всегда они не влияют на р-т

Answer 3

Если будет не понятно что происходит - объясню в комнетариях)

'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));

READ ALSO
Новый поток для отправки пинга сокету

Новый поток для отправки пинга сокету

У меня есть переменная $socket которая и содержит мой сокет, есть основной поток для обработки событий сокета и нужен другой поток для отправки...

189
Сохранение данных в БД пользователя и гостя при создании поста

Сохранение данных в БД пользователя и гостя при создании поста

Гостевая книга на сайте где можно оставить пост как гостю так и зарегпользователю

228
Как защитить сайт от перебора паролей?

Как защитить сайт от перебора паролей?

Всем здарова, срочно нужна помощьУ меня реализована простая авторизация, в бд хранится e-mail, и хэш пароля

275
node.js vs php на одном сервере?

node.js vs php на одном сервере?

Приветствую! У меня совсем нет понимания, что такое nodejs

319