老师,我做了今日一题,还是用的朴素的遍历方法,因为直观直接, 哈哈哈,leetcode是报了超时,然后我也看了您的代码,没领会。。。
/**
* @param {string} s
* @return {number}
*/
var beautySum = function(s) {
let res = 0; // 存放结果
for( let i = 0; i < s.length; i ++ ){
// [i, j]之前的美丽值
let map = {};
for( let j = i; j < s.length; j ++ ){
// [i, j]
// 得到出现频率最高的次数与频率最低的次数
for( let k = i; k <= j; k ++ ){
let nowCh = s[k];
map[nowCh] = map[nowCh] || 0;
map[nowCh]++;
} // for k
// 在map中找到 => 出现频率最高的次数与频率最低的次数
let arr = Object.entries(map);
arr.sort((a, b)=>b[1]-a[1]); // 排序
res += (arr[0][1] - arr[arr.length-1][1]);
map = {}; // 处理完 [i, j]这一段子字符串后,map清空
} // for j
} //for i
return res;
};
==========================更新1 =================================
let res = 0; // 存放结果
for( let i = 0; i < s.length; i ++ ){
// [i, j]之前的美丽值
let map = {};
for( let j = i; j < s.length; j ++ ){
let nowCh = s[j];
map[nowCh] = map[nowCh] || 0; // 对nowCh未出现的情况初始化为0
map[nowCh] ++;
// 在map中找到 => 出现频率最高的次数与频率最低的次数
let arr = Object.entries(map);
arr.sort((a, b)=>b[1]-a[1]); // 排序
res += (arr[0][1] - arr[arr.length-1][1]);
} // for j
} //for i
return res;
};