问题:查找字符串中出现最多的字符和个数

var str = 'sdjksfssscfssdd';
解决思路:
将字符串转化为下面的格式:

1
2
3
4
5
* {
* s : [s,s,s...],
* d : [d,d,d...],
* ...
* }

源码地址:https://codesandbox.io/s/arithmetic-str1-xct05?file=/index.html

解法一:字符串方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(function (str) {
var obj = {};
var num = 0;
var value = '';
for (var i = 0; i < str.length; i++) {
// 如果obj中不存在某个字符属性,就把它添加进去
if (!obj[str[i]]) {
obj[str[i]] = [];
}
// 把值一一填入到obj[a[i]]中
obj[str[i]].push(str[i]);
}
//console.log(obj);
// 找出最多项的那个
for (var attr in obj) {
if (num < obj[attr].length) {
num = obj[attr].length;
value = obj[attr][0];
}
}
var res = '字符最多的是' + value + ',出现了' + num + '次';
console.log(res);
})(str);

解法二:正则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(function (str) {
var num = 0;
var value = '';
// 排序
str = str.split('').sort().join('');
// 计算
// \1表示和(\w)相同,这里找出连续相同的字符串
var re = /(\w)\1*!/g;
str.replace(re, function ($0, $1) {
if (num < $0.length) {
num = $0.length;
value = $1;
}
});
var res = '字符最多的是' + value + ',出现了' + num + '次';
console.log(res);
})(str);