2017-06-04 51 views
0

我正在接受freecodecamp挑戰「檢查Palindromes」。編寫一個函數來檢查給定的字符串是否是迴文。這裏是我的代碼:如何使用比較運算符確定字符是字母數字?

function palindrome(str) { 
     str = str.toLowerCase(); 
     for(var i=0; i<str.length; i++){ 
     if((str[i] > 'z' || str[i] < 'a') && (str[i] < '0' || str[i] > '9')){ 
      str = str.replace(str[i], ''); 
     } 
     } 
     for(i=0; i<str.length/2; i++){ 
     if(str[i] != str[str.length-1-i]){ 
     return false; 
     } 
     } 
     return true; 
    } 

但它工作不正常。當我使用replace(/[\W_]/g, '');

function palindrome(str) { 
     str = str.toLowerCase().replace(/[\W_]/g, ''); 
// for(var i=0; i<str.length; i++){ 
//  if((str[i] > 'z' || str[i] < 'a') && (str[i] < '0' || str[i] > '9')){ 
//  str = str.replace(str[i], ''); 
//  } 
// } 
     for(i=0; i<str.length/2; i++){ 
     if(str[i] != str[str.length-1-i]){ 
      return false; 
     } 
     } 
     return true; 
    } 

功能工作正常。我的第一個方法不正確嗎?

+0

你能給一些示例輸入+輸出 –

+0

是的,你的第一個片段是不正確。它會改變字符串 - 縮短它 - 同時迭代它。 – cartant

+0

@cartant我現在明白了。非常感謝。 –

回答

0

Palindromes忽略大小寫,空格,標點符號和換行符等。

所以:

的人。一個計劃。運河:巴拿馬!

是一個有效的迴文。

因此,你需要嘗試對其進行評估之前,去除所有的標點和空格你的字符串,這樣你實際上評估字符串是:

amanaplanacanalpanama

然後,它很容易做到無論你想要比較剩餘的字符。

我做的這一個前一陣子,其中包括一些測試中,它可能是值得考慮的:https://github.com/pvencill/palindrome

相關問題