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

问题描述

将返回在输入字符串中多次出现的不同大小写字母字符和数字数字的计数的函数。

"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');

标签: javascriptloopsfor-loopnested-loops

解决方案


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'));


推荐阅读