【发布时间】:2019-06-10 01:47:42
【问题描述】:
在以下代码中:
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[keys])*(subString[keys]-1)/2
假设 s = "kkkk",则 "k"s 将有 6 个字谜
有人可以解释一下吗?
此外,这种情况告诉我,我可能在某些类型的数学方面有些欠缺。如果你能给我一个很好的材料来学习这样的数学,我会很感激的!
【问题讨论】:
标签: javascript algorithm math anagram