javascript - 使用嵌套循环计算重复项的数量。如何避免比较具有相同索引的两个字符
问题描述
将返回在输入字符串中多次出现的不同大小写字母字符和数字数字的计数的函数。
"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'));
推荐阅读
- typescript - 在插件中从 Vuex 导入类型会在新 Vue 中引发错误
- apache - Apache反向代理重写js文件
- review - 查看第一个帖子时,无法将问题标记为重复或属于另一个站点
- css - 如何定位所有 CSS 链接选择器?
- python - 如何将列表中的值替换为其相邻值的平均值?
- html - 无法通过 CSS 居中调整大小的大图像
- postgresql - 如何以最佳方式执行内部连接
- c# - 如何创建一个收集元素的 Rx 可观察对象,直到 X 秒内没有收到新的传入元素
- android - 安装 WSL2 后,Android Studio 模拟器无法在 Windows 11 上运行
- hadoop - HDFS 不遵守 LDAP 组映射设置