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); }