一、题目
描述
给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的漂亮度是其所有字母漂亮度的总和
每个字母都有一个漂亮度,范围在1到26之间。没有任何两个不同字母拥有相同的漂亮度。字母忽略大小写。
给出多个字符串,计算每个字符串最大可能的漂亮度
数据范围
输入的名字长度满足 1<=n<=10000
输入
第一行一个整数N,接下来N行,每行一个字符串
输出
每个字符串最大可能的漂亮度
二、思路
创建一个大小为26的int型数组letter
letter数组下标从0到25分别代表从a到z
对字符串中的字母进行统计,数组letter中的元素大小表示对应字母出现的次数
将最高漂亮度分配给出现次数最多的字母,依次类推
三、自己写的代码
#include<stdio.h>
int main() {
int n, i, j, k, max;
int letter[26];
scanf("%d", &n);
char line[n][10002];
int res[n];
for (i = 0; i < n; i++) {
scanf("%s", line[i]);
}
for (i = 0; i < n; i++) {
j = 0;
while (line[i][j] != '\0' && line[i][j] != 10) {
letter[line[i][j] - 'a']++;
j++;
}
res[i] = 0;
for (j = 0; j < 26; j++) {
max = 0;
for (k = 0; k < 26; k++) {
if (letter[k] > max) {
max = letter[k];
}
}
if (max == 0) {
j = 26;
continue;
}
res[i] += (max * (26 - j));
for (k = 0; k < 26; k++) {
if (letter[k] == max) {
letter[k] = 0;
k = 26;
}
}
}
}
for (i = 0; i < n; i++) {
printf("%d\n", res[i]);
}
return 0;
}