• 【C语言刷LeetCode】451. 根据字符出现频率排序(M)


    给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。

    返回 已排序的字符串 。如果有多个答案,返回其中任何一个。

    示例 1:

    输入: s = "tree"
    输出: "eert"
    解释: 'e'出现两次,'r'和't'都只出现一次。
    因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。
    示例 2:

    输入: s = "cccaaa"
    输出: "cccaaa"
    解释: 'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。
    注意"cacaca"是不正确的,因为相同的字母必须放在一起。
    示例 3:

    输入: s = "Aabb"
    输出: "bbAa"
    解释: 此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。
    注意'A'和'a'被认为是两种不同的字符。
     

    提示:

    1 <= s.length <= 5 * 105
    s 由大小写英文字母和数字组成

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/sort-characters-by-frequency
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    以看就知道要用HASH 了,两个小点记录下:

    1.题目没说明白,但根据示例2,相同字符要放在一起

    2.查找的时候,HASH_FIND_INT(mymap, &s[i], find);会报奇怪的错误,但 val = s[i] 就好了

    1. typedef struct {
    2. int key;
    3. int val;
    4. UT_hash_handle hh;
    5. } UTHASH;
    6. int Cmp(UTHASH *a, UTHASH *b) {
    7. return b->val - a->val;
    8. }
    9. char * frequencySort(char * s){
    10. int len = strlen(s);
    11. int i;
    12. UTHASH *mymap = NULL;
    13. char *retarr = malloc(sizeof(char) * (len + 1));
    14. memset(retarr, 0, sizeof(char) * (len + 1));
    15. for (i = 0; i < len; i++) {
    16. UTHASH *find = NULL;
    17. int val = s[i];
    18. HASH_FIND_INT(mymap, &val, find);
    19. if (find != NULL) {
    20. find->val++;
    21. } else {
    22. UTHASH *new = malloc(sizeof(UTHASH));
    23. new->key = s[i];
    24. new->val = 1;
    25. HASH_ADD_INT(mymap, key, new);
    26. }
    27. }
    28. HASH_SORT(mymap, Cmp);
    29. UTHASH *cur, *tmp;
    30. int idx = 0;
    31. HASH_ITER(hh, mymap, cur, tmp) {
    32. int cnt = cur->val;
    33. while (cnt > 0) {
    34. retarr[idx++] = cur->key;
    35. cnt--;
    36. }
    37. }
    38. return retarr;
    39. }

  • 相关阅读:
    HTTP协议简介
    ZZNUOJ_C语言的算法「零基础9讲」和「题库150例练习」-总目录(更新中)
    【随机过程】布朗运动
    VPS和云服务器的区别
    AWVS漏洞扫描使用基础与介绍
    程序员业务,微信全文搜索技术优化
    Mybatis和MybatisPlus:数据库操作工具的对比
    阿里云通义千问14B模型开源!性能超越Llama2等同等尺寸模型
    React native Navigation传值跳转小白教程
    【单链表经典习题讲解】
  • 原文地址:https://blog.csdn.net/jin615567975/article/details/126066404