2016-08-14 97 views
0

我创建了一个函数来检查2个单词是否是anagrams,但是我希望做得更好,在if语句不太好的情况下,我觉得计数器的评价不错,如果有人有更好的解决方案会很好。检查两个字符串中的Anagram

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

只是一个方面说明:返回false为'string1 === string2'。毕竟,“苹果”不是一个“苹果”的字眼。 –

+0

anagram是用不同的顺序用相同的字母做成的单词。也就是说,为了检查一个字谜,唯一需要做的就是为每个单词创建一个字母数组,对数组进行排序并对它们进行比较。你想要的功能在这里: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

???我认为你需要'.sort()'而不是'.reverse()',并且你必须对两个*字符串进行排序。 An * anagram *是由另一个字中任意重排字母组成的单词。 – Pointy

+0

哎呀我误解了一秒的问题 – kemiller2002

5

您的代码返回true字符串 'AABB' 和 'ABCC',这是不字谜。你可以对字符串进行排序,并检查它们是否相等:

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

水坝,这么容易,我没有记住那种类型大声笑 –