题解 | #名字的漂亮度#

名字的漂亮度

http://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3

思路:

  1. 因为仅输入小写字母,所以没有进行不区分大小写的判断
  2. 首先判断相同字母的个数,个数最多的*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;
}
全部评论

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务