【中等】算法nodeJs:名字的漂亮度

61 阅读1分钟

描述

对于给定由小写字母构成的字符串,定义字符串的“漂亮度”为该字符串中所有字母“漂亮度”的总和。
每一个字母的“漂亮度”将由你来确定,具体规则如下:
∙每一个字母的“漂亮度”为 1 到 26 之间的整数;
∙没有两个字母的“漂亮度”相同。
现在,你需要确定每个字母的“漂亮度”,以使得字符串的“漂亮度”最大。

输入描述:

每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≦T≦10) 代表数据组数,每组测试数据描述如下:

在一行上输入一个长度为 1≦len(s)≦104 、仅由小写字母构成的字符串 s 。

输出描述:

对于每一组测试数据,输出一个整数,表示字符串的最大“漂亮度”。

image.png

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    const arr = [];
    while ((line = await readline())) {
        arr.push(line);
    }
    arr.shift();
    for (let str of arr) {
        let map = new Map();
        for (let i = 0; i < str.length; i++) {
            map.set(str[i], (map.get(str[i]) || 0) + 1);
        }
        const mapArr = [...map.values()].sort((a, b) => b - a);
        let value = 0;
        for (let i = 0, j = 26; i < mapArr.length; i++, j--) {
            value += j * mapArr[i];
        }
        console.log(value);
    }
})();