2016-10-11 5 views
0

これは回文と同じスペルの単語です。同じ後方にあるフレーズを取りたい場合はどうすればよいですか?だからkookは1です。 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))を実行します。私はarrを返すのであれば、ここで私が書いたものだがでなかった。..

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

、それはまだ私にスペースを含む文字列を与えます。これをどのように達成するのですか?ありがとう!

EDIT:ソリューションを使用しますが、それでもここにレースカー「 に偽得ることは、私が得たものです:

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

をあなたの問題は、次の行です。 split( '')は配列を返します。したがって、arrは実際には1つのエントリを持つ配列です(文字を含む別の配列)。

var arr = string.split(''); 

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

をして

+0

はまだ偽なっ期待どおりに動作するはずです:(ここで私がやったこと...ファンクションisPalindrome(文字列){ するvar ARR =文字列です:交換してください。 (arr [i] === ''){ arr.splice(i、1); } else if(i = 0、i bikedres

+0

「レースカー」でこれを実行しているとしたら、あなたのコードはスペースに当たる前に「e」に当たっています。したがって、elseに移動し、 'e'と ''を一致させてfalseを返します。 'r 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:あなたは、スペースを無視したい場合は、単にスペースのすべてのインスタンス削除

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

文字列:

var word = 'race car'; 

var isPalindrome = function(word) { 
    var nospaces = word.replace(/\s/g, ''); 
    return nospaces.split('').reverse().join('') === nospaces; 
} 
関連する問題