JavaScript题解 | #名字的漂亮度#
名字的漂亮度
https://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3
const rl = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
const inputs = [];
rl.on('line', (line) => {
inputs.push(line);
}).on('close', () => {
for(let i = 0; i < inputs.length;) {
const n = inputs[0];
const strs = inputs.slice(i+1, n+1);
maxBeautifulNum(strs);
i += n;
}
})
function maxBeautifulNum(strs) {
for (let i = 0; i < strs.length; i++) {
const currentStr = charSortArr(strs[i]);
let beautifulNum = 0;
for (let i = 0; i < currentStr.length; i++) {
beautifulNum += currentStr[i].count * (26 - i);
}
console.log(beautifulNum);
}
}
// 根据str 根据字符出现的次数排序
function charSortArr(str) {
let res = [];
for (let i = 0; i < str.length; i++) {
const temp = str[i];
if (res.length == 0) {
res.push({
char: temp,
count: 1,
});
} else {
const index = res.findIndex((item) => item.char === temp);
if (index > -1) {
res[index].count++;
} else {
res.push({
char: temp,
count: 1,
});
}
}
}
res = res.sort((a, b) => {
return b.count - a.count;
});
return res;
}
难度:⭐
题意:
计算每个字符串的总的‘漂亮度’,每个字符都有一个对应的‘漂亮度’。所以需要将字符串里的字符按次数先排个序,然后按从大到小分配26 - 1的权重,最后计算权重和即可。
步骤:
- 按出现次数将字符排序,这里我用了map(对象)的结构去遍历字符串的字符,并记录count,再用sort根据count从大到小排序。
- 再根据排好序的字符计算权重:total += count *(26 - i)
let beautifulNum = 0;
for (let i = 0; i < currentStr.length; i++) {
beautifulNum += currentStr[i].count * (26 - i);
}

