2016-10-11 21 views
0

好吧,迴文是一個拼寫反向的單詞。如果我們想要採用一個同樣向後的短語呢?所以kook就是其中之一。 race car是另一個。試圖創建一個佔空格的迴文函數

所以我做了一個不佔空間。

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

這一個工作正常的單詞。

現在我在想,把字符串推入一個數組,然後將每個字符分成它自己的字符串,然後刪除所有空格,然後運行if (string.charAt(i) != string.charAt(string.length - i - 1))。因此,這裏是我寫的,但在失敗..

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

如果我回到arr,但它仍然給了我與它的空間的字符串。我該如何做到這一點?謝謝!

編輯:使用的解決方案,但仍然得到關於「賽車」 這裏假是我得到的:

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

這裏是我的錯誤?

回答

1

你的問題出在下面一行:

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

字符串。 split('')返回一個數組。所以,arr實際上是一個有一個入口的數組(包含你的字符的另一個數組)。替換:

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

var arr = string.split(''); 

,並如預期

+0

仍然得到錯誤的,應該工作:(這裏是我所做的......功能isPalindrome(串){VAR ARR =字符串。如果(arr [i] ===''){ arr.splice(i,1); } else if(i = 0; i bikedres

+0

想象一下,你在'賽車'上運行這個程序,你的代碼在碰到空間之前碰到'e'。因此,它會轉到else,如果與''匹配並且返回false,則返回。 嘗試在'acecar'上運行你的代碼,它會返回true。只要空間在弦的中點之前,它就會工作。 我的建議是在檢查迴文之前去掉空格。通常認爲在循環內部修改數組的長度(通過刪除項目)是一個壞主意,它正在遍歷該數組。 –

1

只是檢查檢查字符串沒有空格:

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

這似乎只是分成數組要容易得多,扭轉和再次加入到檢查,如果一個詞是迴文。如果要忽略空格,只是刪除所有實例的空間:

let word = 'race car'; 

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

或非ES6:

var word = 'race car'; 

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