C语言 | Leetcode C语言题解之第49题字母异位词分组

题目:

题解:

/*
    1.将字符串原串与副本进行绑定成一个节点

    2.对字符串副本进行按ascii码表进行从小到大排序

    3.按照字符串进行比较排序

    4.合并
*/
typedef struct Node{
    char*s;
    char*s_vice;
    int len;
}Node;

void sortShellChar(char*s,int len){
    for(int distance=len/2;distance!=0;distance/=2){
        for(int i=distance;i<len;i++){
            char c=s[i];
            int pre=i-distance;
            while(pre>=0&&s[pre]>c){
                s[pre+distance]=s[pre];
                pre-=distance;
            }
            if(pre+distance!=i){
                s[pre+distance]=c;
            }
        }
    }
}

void sortShellString(Node*arr,int size){
   for(int distance=size/2;distance!=0;distance/=2){
       for(int i=distance;i<size;i++){
           int pre=i-distance;
           Node node=arr[i];
           while(pre>=0&&strcmp(arr[pre].s_vice,node.s_vice)<0){
               arr[pre+distance]=arr[pre];
               pre-=distance;
           }
           if(pre+distance!=i){
               arr[pre+distance]=node;
           }
       }
   }
}

char*** groupAnagrams(char** strs, int strsSize, int* returnSize, int** returnColumnSizes) {
    Node*strsNode=malloc(sizeof(Node)*strsSize);
    int strsNodeSize=strsSize;
    for(int i=0;i<strsSize;i++){
        strsNode[i].len=strlen(strs[i]);
        strsNode[i].s=strs[i];
        strsNode[i].s_vice=malloc(sizeof(char)*( strsNode[i].len+1));
        strcpy(strsNode[i].s_vice, strsNode[i].s);
        sortShellChar(strsNode[i].s_vice, strsNode[i].len);
    }
    sortShellString(strsNode, strsNodeSize);
    char***stack=malloc(sizeof(char**)*9869);
    int top=-1;
    int start=0;
    *returnColumnSizes=calloc(9869,sizeof(int));
    while(start<strsNodeSize){
        int end=start+1;
        while(end<strsNodeSize&&strcmp(strsNode[start].s_vice,strsNode[end].s_vice)==0){
            end++;
        }
        char**mergeWords=malloc(sizeof(char*)*(end-start));
        for(int i=0;i<end-start;i++){
            mergeWords[i]=strsNode[start+i].s;
        }
        stack[++top]=mergeWords;
        (*returnColumnSizes)[top]=end-start;
        start=end;
    }
    *returnSize=top+1;
    return stack;
}

相关推荐

  1. leetcode49字母分组

    2024-04-25 11:20:06       46 阅读
  2. 【算法49. 字母分组

    2024-04-25 11:20:06       58 阅读
  3. [ LeetCode ] 刷刷(Python)-49字母分组

    2024-04-25 11:20:06       35 阅读
  4. LeetCode 49 字母分组

    2024-04-25 11:20:06       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 11:20:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 11:20:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 11:20:06       82 阅读
  4. Python语言-面向对象

    2024-04-25 11:20:06       91 阅读

热门阅读

  1. Eureka详解

    2024-04-25 11:20:06       33 阅读
  2. 关于css溢出

    2024-04-25 11:20:06       31 阅读
  3. webpack源码分析——loader-runner库之runLoaders函数

    2024-04-25 11:20:06       26 阅读
  4. sessionStorage、localStorage、cookie的缓存

    2024-04-25 11:20:06       36 阅读
  5. Go语言 Map

    2024-04-25 11:20:06       34 阅读
  6. 若依ruoyi-vue前端页签缓存设置

    2024-04-25 11:20:06       35 阅读
  7. Golang编译优化——公共子表达式消除

    2024-04-25 11:20:06       37 阅读