使用嵌套循环计算重复项的数量。如何避免比较具有相同索引的两个字符

Counting the number of duplicates with nested loops. How to escape from comparing two chars with the same index

函数将 return 计算输入字符串中多次出现的不区分大小写的不同字母字符和数字的数量。

"abcde" -> 0 # 没有字符重复超过一次

"indivisibility" -> 1 # 'i' 出现六次 rs 两次

问题是每次迭代循环都在同一个字符上相遇并进行比较。我怎样才能避免它?

function duplicateCount(text){
  var texT = text.toLowerCase();
var count = 0;
  var total = 0;
  for(var i = 0; i < texT.length; i++ ){
      var char = texT[i];
      if(count > 1){
            total = total + 1;
      }
  
      for ( var j = 0; j < texT.length; j++){
          var char2 = texT[j];
          if(char === char2){
              count = count + 1;
          }
    
          
      }
      
  }
     return total;
  
}
duplicateCount('kBHhJkj8l8');

function duplicateCount(text){
  var texT = text.toLowerCase();
  const obj = {};
  for(var i = 0; i < texT.length; i++ ){
      if(obj[texT[i]]) {
        obj[texT[i]] += 1;
      }
      else {
        obj[texT[i]] = 1;
      }
  }
  let total = 0;
  Object.keys(obj).forEach(key => {
    if(obj[key] != 1){
      total += 1;
    }
  })
  return total;
}
console.log(duplicateCount('kBHhJkj8l8'));

使用散列来跟踪访问过的字符,如果您已经有重复的字符(至少 2 个)则跳过比较:

function duplicateCount(text){

  text = text.toLowerCase();

  const occurrences = {};

  for (let char of text) {
    if (occurrences[char] === 2) continue; // skip comparison
    occurrences[char] = ~~ occurrences[char] + 1;
  }

  return Object.values(occurrences)
    .filter((occurrence) => occurrence > 1)
    .length;
}

console.log(duplicateCount('kBHhJkj8l88888'));