在以下代码中:
function sherlockAndAnagrams(s) {
var pairs = 0;
var subStrings = {};
//find all substrings of our string, count them in a hash
for(var i = 0; i < s.length; i++){
for(var j = i; j < s.length; j++){
let tempSubString = s.substring(i, j+1).split("").sort().join("");
if(subStrings[tempSubString]){
subStrings[tempSubString] +=1;
}else{
subStrings[tempSubString] = 1;
}
}
}
//****ATTENTION******
for(var keys in subStrings){
if(subStrings[keys] > 1){
let temp = (subStrings[keys])*(subStrings[keys]-1)/2;
pairs += temp;
}
}
return pairs;
}
我不确定该公式背后的数学原理:
subString [键])*(subString [键] -1)/ 2
假设s =“ kkkk”,将有6个字母“ k”的字谜
有人可以解释一下吗?
此外,这种情况告诉我,我可能在某种数学上有些欠缺。如果您能建议我学习一种很好的材料来解决这样的数学问题,我将不胜感激!
答案 0 :(得分:0)
逻辑如下:您有n
个彼此相似的词。您可以从中选择几对字谜?这是一个简单的combinatoric问题,答案为{{1}的binominal coefficient,即(n,2)
。
逻辑是,如果计算所有字谜,则可以以n*(n-1)/2
方式选择第一个字谜,以n
方式选择第二个字谜,但每个字谜将被视为两次:一次为{{1} },另一次为n-1