2016-08-14 2 views
0

2つの単語がアナグラムであるかどうかをチェックする関数を作成しましたが、if文の後にカウンタの宣言があると感じています。より良い解決策は素晴らしいでしょう。ここで2弦のアナグラムを確認する

function checkAnagram(string1, string2){ 

     if(string1.length !== string2.length){ 
      return false; 
     } 

     for(var i = 0; i < string1.length; i++){ 

      if(count <= 0){ 

       return false; 
      } 
      var count = 0; 

      for(var t = 0; t < string2.length; t++){ 

       //counter = 0 

       if(string2[t].toLowerCase() == string1[i].toLowerCase()){ 
        //counter++; 
        count++; 
        break; 
       } 


      } 

     } 

     return true; 
    } 
+0

「string1 === string2」の場合はfalseを返します。結局のところ、 "リンゴ"は "リンゴ"のアナグラムではありません。 –

+0

アナグラムは同じ文字で異なる順序で作られた単語です。つまり、アナグラムを確認するには、単語ごとに文字の配列を作成し、配列を並べ替えて比較するしかないと思います。必要な機能はここにあります:http://stackoverflow.com/a/23785653/5768908 –

答えて

7

それを行うための非常に簡単な方法です:

var s1 = "test" 
var s2 = "tset" 

function testAnagram (s1, s2){ 

if(!s1 || !s2 || s1.length !== s2.length){return false;} 

var lS1 = s1.toLowerCase(); 
var lS2 = s2.toLowerCase(); 

if(lS1 === lS2) {return false;} 

var rS1 = lS1.split('').sort().join(''); 
var rS2 = lS2.split('').sort().join(''); 

return rS1 === rS2; 
} 



var result = testAnagram(s1, s2); 

alert(result); 
+1

s2を "ttse"に変更すると、 "false"になります。 –

+0

???私はあなたが '.reverse()'ではなく '.sort()'をしたいと思うので、*両方の文字列をソートする必要があります。 *アナグラム*は、別の単語の文字の任意の並べ替えから形成された単語です。 – Pointy

+0

おっと私は質問が1秒であると誤解しました – kemiller2002

5

あなたのコードはアナグラムでない文字列「AABB」と「ABCC」のためにtrueを返します。文字列をソートし、それらが等しいかどうかを確認するだけです:

function checkAnagram(string1, string2) { 
    return string1.toLowerCase().split("").sort().join("") === string2.toLowerCase().split("").sort().join("") 
} 
+0

ダムなので、私は並べ替えについて覚えていません。 –

関連する問題