目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、JavaScript算法源码
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个字符串,计算每个字符串最大可能的“漂亮度”。
本题含有多组数据。
数据范围:输入的名字长度满足 1≤n≤10000
。
二、输入描述
第一行一个整数N,接下来N行每行一个字符串。
三、输出描述
每个字符串可能的最大漂亮程度。
四、解题思路
- 读取输入的整数 N,表示有多少个字符串;
- 使用循环读取每个字符串,并进行处理:
- 初始化一个长度为26的数组 counter,用于记录每个字母出现的次数;
- 遍历当前字符串的每个字符 c,将其对应的计数器加1;
- 创建一个动态数组 list,用于存储所有非零计数器的值;
- 将计数器数组中大于0的值加入 list 中;
- 对 list 进行降序排序,确保出现次数多的字母在前面;
- 初始化变量 point 为26,用于表示字母的漂亮度;
- 初始化变量 sum 为0,用于累计最大可能的漂亮度;
- 遍历 list,计算每个字母的漂亮度并累加到 sum 中;漂亮度计算方式为 (point - i) * list.get(i),其中 i 为当前字母在 list 中的索引;
- 输出最大可能的漂亮度 sum;
- 循环结束后,所有字符串的最大可能漂亮度计算完成;
五、JavaScript算法源码
function calculateBeauty(N, strings) {
const results = [];
for (let k = 0; k < N; k++) {
const s = strings[k];
const counter = new Array(26).fill(0);
for (const c of s.toLowerCase()) {
const index = c.charCodeAt() - 97;
counter[index]++;
}
const list = [];
for (const n of counter) {
if (n > 0) {
list.push(n);
}
}
list.sort((a, b) => b - a);
let point = 26;
let sum = 0;
for (let i = 0; i < list.length; i++) {
sum += (point - i) * list[i];
}
results.push(sum);
}
return results;
}
🏆下一篇:华为OD机试真题 JavaScript 实现【贪心的商人】【2023Q1 100分】
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。