2017-03-29 6 views
0
function myAnagram(arr1,arr2) 
{ 
    var str1=arr1; 
    var str2=arr2; 
    var temp1=[]; 
    var temp2=[]; 
    var flag=0; 

    if(str1.length!==str2.length) 
    { 
     return "Not Anagram statement A"; 
    } 
    else 
    { 
     for(var i=0;i<str1.length-1;i++) 
     { 
      temp1[i]=str1[i]; 
     } 

     for(var j=0;j<str2.length-1;j++) 
     { 
      temp2[i]=str2[i]; 
     } 

     temp1.sort(); 
     temp2.sort(); 

     for(var k=0;k<str1.length-1;k++) 
     { 
      if(temp1[j]!==temp2[j]) 
      { 
       return "Not Anagram statement C"; 
      } 
      else 
      { 
       return "Anagram! statement D"; 
      } 
     } 
    } 
} 

イムはとてものJavaScriptのアナグラム[ASK]を

、2つの文字列の間のチェック、簡単なアナグラムをしようと、私が試した:myAnagram("frog","rg0f");

それは実際にそれがに帰りでなければ、文Dに戻りますステートメントCの権利?私はすでに!==オペレータを使用しているので?それは正しい論理ですか?

+0

は、あなたの入力文字列や配列がありますか? –

+0

あなたは[palindorme](https://en.wikipedia.org/wiki/Palindrome)アルゴリズムやアナグラムを解くことを意味していますか? @Axel –

+0

@DanIonescu私の入力は文字列であり、アナグラムのみを実装しています。ご意見ありがとうございます。D – Axel

答えて

0

問題は、ループで使用した識別子に問題があります。 修正されたコードを見てください。

function myAnagram(arr1, arr2) { 

    var str1 = arr1; 
    var str2 = arr2; 
    var temp1 = []; 
    var temp2 = []; 
    var flag = 0; 
    if (str1.length !== str2.length) { 
     return "Not Anagram statement A"; 
    } else { 
     for (var i = 0; i < str1.length; i++) { 
      temp1[i] = str1[i]; 
     } 

     for (var j = 0; j < str2.length; j++) { 
      temp2[j] = str2[j]; 
     } 
     temp1.sort(); 
     temp2.sort(); 
     for (var k = 0; k < str1.length; k++) { 
      if (temp1[k] !== temp2[k]) { 
       return "Not Anagram statement C"; 
      } else { 
       return "Anagram! statement D"; 
      } 
     } 
    } 
} 

希望すると助かります! PS:このコードを大幅に最適化することができます。

+0

hi mate!説明のおかげで、私は今しようとします。ありがとう! :D gbu – Axel

0

あなたのループは、とstr1.length - 1を一緒に使用しているため、最後の要素をスキップします。最初の文字が一致した場合(あるいはそうでないとき)あなたの比較ループですでに返すあなたはさらに
for (var i = 0; i < str1.length; ++i) {...}または
for (var i = 0; i <= str.length-1; ++i) {...}

を使用する必要がありますどちらか。したがって、ループは2番目(またはn番目)の文字を比較しません。ループは、ある点で配列が異なっていることを確かめるまで、文字をさらに比較する必要があります。

あなたは

function isAnagram(str1, str2) { 
    if (str1.length !== str2.length) return false 

    var arr1 = arr2 = [] 
    for (var i = 0; i < str1.length; ++i) { 
     arr1[i] = str1[i] 
     arr2[i] = str2[i] 
    } 

    arr1.sort() 
    arr2.sort() 

    for (var i = 0; i < arr1.length; ++i) 
     if (arr1[i] !== arr2[i]) return false 
    return true 
} 

などの機能を縮小することができます。そして

if (isAnagram("frog","rg0f")) { 
    console.log("Anagram!") 
} else { 
    console.log("Not Anagram.") 
} 
+0

こんにちは@mmende、あなたの助けと説明のおかげで、今私はwheres問題が知っている。 btw非常に仲間ありがとう! gbu! – Axel