2016-08-16 2 views
-1

Я пытаюсь решить эту головоломку, ниже инструкцияJavascript подсчета повторяющихся записей в строке

Вы дали strarr массив строк и целое число к. Ваша задача - вернуть первую длинную строку, состоящую из k последовательных строк, взятых в массиве.

Пример:

longest_consec ([ "зона", "Abigail", "тета", "форма", "Libe", "зас", "тета",> "Abigail"], 2) - -> «abigailtheta» n - длина массива строк, если (n = 0) или (k> n) или (k < = 0) return "";

Ниже приведен мой код, над которым я работал до сих пор. У меня есть объяснения.

function longestConsec(strarr, k) { 

if((strarr.length == 0) || (k > strarr.length) || (k <= 0)){ 
    return ""; // solves return of empty string 
    } 

    var empty = ''; 
    var str = strarr.split(' '); // then splits into an array which can be cycled through. 

for (var i = 0; i < strarr.length; i++){ // cycle through length; 
    for(var j = 0; j < strarr[i]; j++){ // cycle through ontop of that 
    if (strarr[i] === strarr[j]){ // compare if any of cycle 1 = cycle 2 
     empty.concat(strarr[i]); // if it does, concat the word into a string 
     } 
    } 
    } 
} 
+0

??? Прочитайте свой Q несколько раз и пример ответа, и его ответ не имеет смысла. ? Не имеет значения порядок строк? Если это так, то это значит для содержимого каждой строки? – Blindman67

+0

Метод '.concat()' возвращает строку * new *, не изменяет вашу существующую строку 'empty'. – nnnnnn

+0

Исходный вопрос ужасный. Я могу читать каждое слово, но не могу понять предложение. – Leo

ответ

2
function longest_consec(strarr, k) { 
    var longest = ''; 
    for (var i = 0, testString; i <= strarr.length - k; i++) { 
    testString = strarr.slice(i, i + k).join(''); 
    if (testString.length > longest.length) longest = testString; 
    } 
    return longest; 
} 
console.log(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], 2)); 
0

К сожалению, у меня была ошибка. Не пробовал все тестовые примеры.

подлая часть здесь:

sub = arr.slice(ix, ix + k).join(''); 

Берет массив, который они дают вам и скопировать кусок с помощью метода slice. Это берет начало и конечное значение. Итак, вы начинаете с индекса и добавляете к нему k. Затем вы используете метод join, чтобы соединить кусок вместе в виде строки.

Теперь просто сравнить длину этой строки с самой длинной, которую вы нашли до сих пор. Мы начинаем с пустой строки, поэтому первый кусок всегда будет больше.

Если вы не знаете о slice и join, это становится немного сложнее.

console.log(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], 2)); 
 
console.log(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], 3)); 
 
console.log(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], 0)); 
 
console.log(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], -1)); 
 
console.log(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], 9)); 
 

 
function longest_consec(arr, k) { 
 
    var longest = ""; 
 
    var sub = ""; 
 

 
    if(k < 0 || k > arr.length) return ""; 
 

 
    for(var ix = 0; ix < arr.length; ix++) { 
 
     sub = arr.slice(ix, ix + k).join(''); 
 
     if(sub.length > longest.length) longest = sub; 
 
    } 
 

 
    return longest; 
 
}

+0

Спасибо. Я добавил небольшую часть, и она сработала.Если бы вы могли помочь мне понять это, я был бы благодарен. –

+0

'функция longestConsec (arr, k) { var longest =" "; var sub = ""; if ((arr.length == 0) || (k> arr.length) || (k <= 0)) { return ''; } для (var ix = 0; ix longest.length) longest = sub; } return longest; } ' –

0
<script> 
const Array = ["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"]; 
let bigArray = Array[0]; 
if(Array.length > 0){ 
    Array.forEach(value => { 
    if(value.length > bigArray.length){ 
     bigArray = value; 
    } 
    }); 
    console.log(bigArray); //abigail 
    //bigArray now contain the biggest string in the "Array" variable 
}else{ 
    //array is empty 
} 
</script> 
0

Просто для удовольствия, вот версия с использованием array .reduce() method вместе с .slice() и .join(). Это в основном те же, как и другие .slice().join() ответы, но с использованием .reduce() вместо explict for цикл:

function longest_consec(arr, k) { 
 
    if (k > arr.length || k < 1) return ''; 
 
    return arr.reduce(function(prevLongest, c, i, a) { 
 
    var str = a.slice(i, i + k).join(''); 
 
    return str.length > prevLongest.length ? str : prevLongest; 
 
    }, ''); 
 
} 
 

 
console.log(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], 2)); 
 
console.log(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], 9)); 
 
console.log(longest_consec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], 0));

Или мой код-гольф переписывают выше с использованием функций стрелок:

var longest_consec = (a, k) => 
 
    k>a.length||k<1?'':a.reduce((p,c,i,a)=>(c=a.slice(i,i+k).join('')).length>p.length?c:p,''); 
 

 
console.log(longest_consec(["zone","abigail","theta","form","libe","zas","theta","abigail"],2)); 
 
console.log(longest_consec(["zone","abigail","theta","form","libe","zas", "theta","abigail"],9)); 
 
console.log(longest_consec(["zone","abigail","theta","form","libe", "zas","theta","abigail"],0));

Смежные вопросы