2016-10-11 5 views
0

Okay so Palindrom ist ein Wort, das das gleiche rückwärts geschrieben wird. Was, wenn wir einen Satz nehmen wollen, der auch gleich rückwärts ist? So ist kook eins. race car ist ein anderer.Der Versuch, eine Palindrom-Funktion zu erstellen, die Leerzeichen berücksichtigt

Also habe ich eine gemacht, die keine Leerzeichen berücksichtigt.

function isPal(string){ 
    var l = string.length; 
    for (var i = 0; i < (l/2); ++i) { 
     if (string.charAt(i) != string.charAt(l - i - 1)){ 
      return false; 
     } 
    } 
    return true; 
} 

Dies funktioniert gut für Worte.

Jetzt denke ich, schieben Sie die Zeichenfolge in ein Array, und teilen Sie jedes Zeichen in eine eigene Zeichenfolge, entfernen Sie alle Leerzeichen, und führen Sie dann if (string.charAt(i) != string.charAt(string.length - i - 1)). Also hier ist was ich geschrieben habe, aber scheiterte an ..

function isPalindrome(string){ 
    var arr = []; 
    arr.push(string.split('')); 
    for (i = 0; i < arr.length; i++){ 
     if (arr[i] === ' '){ 
      arr.splice(i, 1); 

wenn ich arr zurückkehren, es gibt mir immer noch die Zeichenfolge mit dem Raum in ihm. Wie erreiche ich das? Vielen Dank!

EDIT: verwendet, um die Lösung, aber immer noch falsch immer auf ‚Rennwagen‘ Hier ist, was ich habe:

function isPalindrome(string){ 
    var arr = string.split(''); 
    for (i = 0; i < arr.length; i++){ 
     if (arr[i] === ' '){ 
      arr.splice(i, 1); 
     } else if (arr[i] != arr[arr.length - i - 1]){ 
      return false; 
     } 
    } 
    return true; 
} 

, wo mein Fehler ist?

Antwort

1

Ihr Problem in der folgenden Zeile ist:

arr.push(string.split('')); 

String. split ('') gibt ein Array zurück. Also, arr ist eigentlich ein Array mit einem Eintrag darin (ein anderes Array, das deine Charaktere enthält). Ersetzen:

var arr = []; 
arr.push(string.split('')); 

mit

var arr = string.split(''); 

und es sollte wie erwartet

+0

noch falsch bekommen :(hier ist, was ich getan habe ... Funktion isPalindrome (string) { var arr = string. split (''); für (i = 0; i bikedres

+0

Stellen Sie sich vor, Sie laufen auf "Rennwagen", Ihr Code trifft das "e", bevor es den Raum trifft. Also geht es zum else if und stimmt 'e' mit '' überein und gibt false zurück. Versuchen Sie, Ihren Code auf 'r acecar' laufen zu lassen und es wird wahr zurückgegeben. Es wird funktionieren, solange das Leerzeichen vor der Hälfte der Zeichenfolge liegt. Mein Rat ist, Räume vor der Prüfung auf Palindrome Streifen zu entfernen. Es wurde im Allgemeinen als eine schlechte Idee betrachtet, die Länge eines Arrays (durch das Entfernen von Elementen) in einer Schleife zu ändern, die dieses Array durchläuft. –

1

einfach überprüfen Sie die Zeichenfolge ohne Leerzeichen überprüfen:

function isPal(string){ 
    string = string.split(" ").join(""); // remove all spaces 
    var l = string.length; 
    for (var i = 0; i < (l/2); ++i) { 
     if (string.charAt(i) != string.charAt(l - i - 1)){ 
      return false; 
     } 
    } 
    return true; 
} 

isPal("a man a plan a canal panama"); // true 
1

es viel einfacher scheint ein Array nur aufgeteilt in, umkehren und kommt wieder zu überprüfen, ob ein Wort ein Palindrom ist. Wenn Sie Leerzeichen ignorieren möchten, entfernen Sie einfach alle Instanzen Plätze:

let word = 'race car'; 

let isPalindrome = (word) => { 
    let nospaces = word.replace(/\s/g, ''); 
    return [...nospaces].reverse().join('') === nospaces; 
} 

oder nicht es6:

var word = 'race car'; 

var isPalindrome = function(word) { 
    var nospaces = word.replace(/\s/g, ''); 
    return nospaces.split('').reverse().join('') === nospaces; 
} 
Verwandte Themen