题解 | #名字的漂亮度#
名字的漂亮度
http://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3
思路:
- 因为仅输入小写字母,所以没有进行不区分大小写的判断
- 首先判断相同字母的个数,个数最多的*26,然后依次往下减少
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cmp(const void *a,const void *b) //快排,从大到小
{
return *(int*)b - *(int*)a;
}
int parse_str(char *str)
{
if(!str)
{
return -1;
}
int count[26] = {0};
int len = strlen(str);
int count_len = 0;
int max = 0;
for(int i = 0; i < len; i++)
{
if(count[str[i]-'a'] == 0)
{
count_len++;
}
count[str[i]-'a']++;
}
//printf("count_len = [%d]\n", count_len);
qsort(count, 26, sizeof(int), cmp);
for(int i = 0; i < count_len; i++)
{
max += count[i]*(26-i);
}
printf("%d\n", max);
return 0;
}
int main()
{
int n = 0;
scanf("%d", &n);
char str[n][10000];
memset(str, 0, n*10000*sizeof(char));
for(int i = 0; i < n; i++)
{
scanf("%s", str[i]);
//printf("str[%d] = [%s]\n", i, str[i]);
}
for(int i = 0; i < n; i++)
{
parse_str(str[i]);
}
return 0;
}