2016-08-16 5 views
-1

Ich versuche, dieses Rätsel zu lösen, ist unter der AnweisungJavascript Zählen doppelte Einträge in einem String

Sie ein Array strarr von Strings und eine ganze Zahl k gegeben sind. Ihre Aufgabe besteht darin, die erste längste Zeichenfolge zurückzugeben, die aus k aufeinanderfolgenden Strings im Array besteht.

Beispiel:

longest_consec ([ "Zone", "abigail", "theta", "form", "LIBE-", "ZAS", "theta",> "abigail"], 2) - -> "abigailtheta" n ist die Länge des String-Arrays, wenn (n = 0) oder (k> n) oder (k < = 0) return "";

Unten ist mein Code, an dem ich bisher gearbeitet habe. Ich habe Erklärungen kommentiert.

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

??? Lies dein Q mehrmals und das Beispiel antwortet und seine Antwort macht keinen Sinn. ? Ist die Reihenfolge der Strings egal ??? Wenn ja, ist das für den Inhalt jeder Saite gleich? – Blindman67

+0

Die Methode '.concat()' gibt eine * neue * Zeichenkette zurück, die vorhandene 'leere' Zeichenkette wird nicht verändert. – nnnnnn

+0

Die ursprüngliche Frage ist schrecklich. Ich kann jedes Wort lesen, kann aber den Satz nicht verstehen. – Leo

Antwort

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

Oops, ich hatte einen Fehler. Habe nicht alle Testfälle getestet.

Der hinterhältige Teil ist hier:

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

Sie das Array nehmen, dass sie Ihnen geben und ein Stück mit der slice Methode kopieren. Dies nimmt einen Start- und einen Endwert an. Sie beginnen also mit dem Index und fügen k hinzu. Dann verwenden Sie die join Methode, um den Chunk als String zusammenzuschlagen.

Jetzt ist es einfach, die Länge dieser Zeichenfolge mit der längsten zu vergleichen, die Sie bisher gefunden haben. Wir beginnen mit einer leeren Zeichenfolge, so dass der erste Teil immer größer wird. Wenn Sie nichts über slice und join wissen, wird es ein bisschen schwieriger.

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

Danke. Ich habe ein kleines Stück hinzugefügt und es hat funktioniert.Wenn Sie mir helfen könnten, dies zu verstehen, wäre ich Ihnen dankbar. –

+0

'Funktion longestConsec (arr, k) { var längste =" "; var sub = ""; if ((arr.length == 0) || (k> arr.length) || (k <= 0)) { return ''; } für (var ix = 0; ix longest.length) longest = sub; } längste Rückkehr; } ' –

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

Just for fun, hier ist eine Version der array .reduce() method zusammen mit .slice() und .join() verwenden. Dies ist im Grunde die gleiche wie die anderen .slice().join() Antworten, aber mit .reduce() anstelle eines explict for Schleife:

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

Oder mein Code-Golf Umschreiben der oben mit Pfeilfunktionen:

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