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的权重,最后计算权重和即可。

步骤:

  1. 按出现次数将字符排序,这里我用了map(对象)的结构去遍历字符串的字符,并记录count,再用sort根据count从大到小排序。
  2. 再根据排好序的字符计算权重:total += count *(26 - i)

    let beautifulNum = 0;
    for (let i = 0; i < currentStr.length; i++) {
      beautifulNum += currentStr[i].count * (26 - i);
    }

全部评论

相关推荐

认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务