2016-08-14 84 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

水壩,這麼容易,我沒有記住那種類型大聲笑 –