2015-03-02 52 views

回答

9

這是一個有趣的問題。我們可以做的是使用String.toLowerCase將字符串轉換爲小寫字母,然後分割爲"",這樣我們就可以得到一組字符。

我們會用Array.sort對它進行分類。經過排序後,我們將使用Array.join加入。 然後,我們可以使用正則表達式/(.)\1+/g,這意味着匹配一個字母和後續字母(如果它們相同)。

當我們使用String.match與規定的正則表達式,我們將得到一個數組,其長度是答案。如果匹配返回null且結果爲TypeError,還使用一些try...catch返回0

function howManyRepeated(str){ 
    try{ return str.toLowerCase().split("").sort().join("").match(/(.)\1+/g).length; } 
    catch(e){ return 0; } // if TypeError 
} 
console.log(howManyRepeated("Indivisibilities")); // 2 
+0

感謝您的回答。如果我傳遞了「abcdef」,它應該返回0,但它顯示一條錯誤消息「TypeError:無法讀取null的屬性'length' – 2015-03-02 10:21:14

+0

@NaveenKrishna現在它應該工作。 – 2015-03-02 10:22:39

+0

Wow優秀的男人,它的作品!簡單而好的答案。 – 2015-03-02 10:29:20

5

您可以使用這樣

function getFrequency(string) { 
var freq = {}; 
for (var i=0; i<string.length;i++) { 
    var character = string.charAt(i); 
    if (freq[character]) { 
     freq[character]++; 
    } else { 
     freq[character] = 1; 
    } 
} 

return freq; 
}; 

getFrequency('Indivisibilities'); 
+1

很酷的做法!謝謝! – devwannabe 2017-08-08 02:50:29