第一种方法
let str = 'sdfgsgsdgfsgfsfgsgfssfgsrger34tyj';
// 使用一个对象去存储 各个不同的字符,把字符当作了对象的属性名, 属性值用来存储该字符出现的次数
function fn(str) {
let obj = {}
for (let i = 0; i < str.length; i++) {
let key = str[i];
if (obj[key]) {
// 已经添加过的属性 属性值要累加1
obj[key]++
} else {
// 若对象中没有这个属性的时候 证明这个字符第一次出现,
// 就把他当作对象一个属性,这个字符第一次出现,所以属性值对应的是1
obj[key] = 1
}
}
console.log(obj);
// 从obj中找出出现次数最多的字符
// 假设 出现最多的次数1次 字符串是空
let char = '',
max = 1;
for (let k in obj) {
if (obj[k] > max) {
// 对象中 有个字符出现的次数比max大 ,
// 重新修改max,让max是当前这个字符出现的次数,char变成当前这个字符
max = obj[k]
char = k;
}
}
}
fn(str)
第二种方法
let str = 'sdfgsgsdgfsgfsfgsgfssfgsrger34tyj';
function fn2(str) {
//先把字符串排序,好处就是会把一样的字符串排在一起
str = str.split('').sort((a, b) => a.localeCompare(b)).join('')
// console.log(str)
// /(\w)\1*/g 是为了匹配那种连续字符
let reg = /(\w)\1*/g; // \1 反向引用 代表第一个小分组匹配的内容
let char = '',
max = 0;
str.replace(reg, function(a, b) {
// console.log(a, b)
if (a.length > max) {
max = a.length;
char = b;
}
})
console.log(char, max)
}
fn2(str)