2017-11-19 15 views
-1

現在、ネストされたforループの問題を解決しようとしています。私は前に逆の方法を使って解決しました。今私はループのための巣でそれを与えられています。NESTED FORループを理解するJavaScriptとパリドローム

なぜ私のコードがうまくいかないのか混乱しています。いくつかの指導を愛し、感謝します。前もって感謝します。

function palindrome(str) { 
 
var splitStr = str.split(""); 
 
for(var x = 0; x < splitStr.length; x++){ 
 
    for(var j = splitStr.length-1; j >= 0; j--){ 
 
    if(splitStr[x] === splitStr[j]){ 
 
     return true; 
 
    } 
 
    } 
 
    return false; 
 
    } 
 
} 
 

 

 

 
palindrome("racecar");

+1

あなたのデバッガでコードをステップ実行し、それが何を参照してください。 – melpomene

答えて

0

実行時に二つのループがやっているだろうかについて考えてみてください。たとえば、3文字の単語では、インデックスは次のようになります。

x == 0, j == 2 
x == 0, j == 1 
x == 0, j == 0 
x == 1, j == 2 
x == 1, j == 1 
x == 1, j == 0 
x == 2, j == 2 
x == 2, j == 1 
x == 2, j == 0 

問題を表示しますか?

また、一致するものがあればtrueを返します。条件は逆にする必要があります。一致するものがすべてfalseの場合はfalseを返します(すべての一致が成功した場合にのみtrueを返します)。

0

racecarのように、このように2つのforループを使用することはできません。最初の時間がi=0j=splitStr.length-1の場合は両方ともrなので、最初にループを終了するときにtrueを返します。何度か他の文字は回文文字ではありません。それはエラーです。このような入れ子のforループでチェックすることはできません。

2

コードが機能しないのは、配列の文字を配列の各文字と逆の順序で比較しようとしているためです。文字列racecarの場合、の各文字と逆の順序で最初にrが比較されます。

また、最初の比較が成功するとすぐに戻ります。

2つのループは必要ありません。これは、1つのループを使用して達成できます。

  • forループは、文字列の長さの半分のインデックスで始まる必要があります。
  • 文字列の長さから1を引いたインデックスとそのインデックスを差し引いた文字を比較します。
  • いずれかの文字が一致しない場合は、ループから脱落します。
  • それ以外の場合は、比較を続行します。
  • あなたの弦の長さの半分に達すると、回文があります。また
    function palindrome(str) { 
     
        var splitStr = str.split(""); 
     
        var isPalindrome = true; 
     
        for(var x = 0; x <= splitStr.length/2; x++){ 
     
        if(splitStr[x] !== splitStr[splitStr.length - 1 - x]){ 
     
         isPalindrome = false; 
     
         break; 
     
        } 
     
        } 
     
        return isPalindrome; 
     
    } 
     
    
     
    
     
    console.log(palindrome("racecar")); 
     
    console.log(palindrome("foobar"));

、あなたは文字列を逆にし、逆に文字列を使用して、元の文字列の値を比較することができます。

var palindrome = function(str) { 
 
return str === str.split('').reverse().join(''); 
 
} 
 

 
console.log(palindrome("racecar")); 
 
console.log(palindrome("foobar"));

関連する問題