2016-08-04 8 views
0

Sagen wir einfach, ich habe zwei Saiten, a & b.Wie wird eine Zeichenfolge in einer anderen Zeichenfolge ohne Verwendung von indexOf übereinstimmen?

var a = '[email protected]'; 
var b = 'yahoo12345556'; 

Was ich erwarte, ist Ergebnis yahoo aber a.indexOf(b) verwenden wäre würde mir -1.

Wenn ich b zu yahoo & a.indexOf(b) tun ändern, es wäre natürlich geben Sie mir nicht -1.

Sollte ich stattdessen Zeichen in einer Schleife übereinstimmen? Aber die zwei Saiten sind nicht gleich lang. Es ist auch wichtig, dass die Zeichen in der Reihenfolge sind, ich suche nicht nach dem Auftreten von Zeichen.

+0

So finden Sie eine Teilzeichenfolge, die zwischen den beiden Variablen ist? –

+0

Was sind Ihre Kriterien für ein Spiel? Längste übereinstimmende Teilkette zwischen beiden? – juvian

+0

Genau, unabhängig von der Position der gesuchten Zeichenfolge in der ursprünglichen Zeichenfolge. – thedeliciousmuffin

Antwort

1

Möglicherweise kann Rekursion verwenden, um dieses Problem zu lösen:

function findLongestCommon (a, b, len) { 
    for (var i = 0; i < a.length-1; i=i+len) { 
     var sub = a.substring(i, len) 
     if (len == 0){ 
      return ""; 
     } 
     else if (sub.indexOf(b) != -1) { 
      return a; 
     } 
     else{ 
      return findLongestCommon(a, b, len-1); 
     } 
} 

Durch den Aufruf findLongestCommon (a, b, a.length) Sie werden in der Lage sein, durch jede Kombination von Buchstaben zu gehen mit dem größten Ausgang (der gesamte String) bis zum kleinsten (ein Buchstabe) und wenn kein Buchstabe gefunden wird, wird ein leerer String zurückgegeben.

+0

In der Frage Titel: "* ohne Verwendung von indexOf *". – hatchet

+0

@hatchet Ich glaube nicht, der Benutzer meinte "ohne indexOf", sondern "Ich habe versucht, indexOf und es hat nicht funktioniert, keine besseren Ideen?". Der einfachste und schnellste Weg, um das Ziel zu erreichen, ist die Verwendung von Rekursion und indexOf. Wenn Sie eine bessere Antwort haben, dann posten Sie es. –