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

news2024/11/15 17:21:18

题目:

题解:

/*
    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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1622142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐3个视频转文字的工具

如果是长视频转文字的话&#xff0c;我会推荐你三个专业的能够将视频文字提取出来的工具&#xff0c;操作无门槛&#xff0c;转换出的文字准确率高&#xff0c;可以直接导出文字。 1.一键识别王 https://www.xunjiepdf.com/yijianshibiewang 专业的图片文字识别软件&#xff0…

依赖型人格的症状和起因,依赖型人格测试和应对方法

每个人的性格不同&#xff0c;对待同一件事的处理方式也不一样&#xff0c;很多人在独自面对某些事情的时候&#xff0c;会有非常明显的无助感和孤独感&#xff0c;他们没办法照顾自己&#xff0c;也无法独立作出决定&#xff0c;只能依赖别人。 这种过度依赖的特质就是依赖型…

LT8711UXD助力新款Swtich游戏机底座《4K/60HZ投屏方案》

Nintendo Switch&#xff08;OLED版&#xff09;正面搭载了一块分辨率为720P的7.0英寸OLED屏幕&#xff1b;具有白色和电光蓝电光红2种颜色&#xff1b;机身长度102毫米&#xff0c;宽度242毫米&#xff0c;厚度13.9毫米&#xff0c;重量约420克。 [2]Nintendo Switch&#xff…

《架构风清扬-Java面试系列第26讲》聊聊的LinkedBlockingQueue的特点及使用场景

LinkedBlockingQueue也是BlockingQueue接口的一个实现类之一 这个属于基础性问题&#xff0c;老规矩&#xff0c;我们将从使用场景和代码示例来进行讲解 来&#xff0c;思考片刻&#xff0c;给出你的答案 1&#xff0c;使用场景 实现&#xff1a;基于链表实现的阻塞队列&#…

后端工程师——Java工程师面试小结

在国内,Java 程序员是后端开发工程师中最大的一部分群体,其市场需求量也是居高不下,C++ 程序员也是热门岗位之一,此二者的比较也常是热点话题,例如新学者常困惑的问题之一 —— 后端开发学 Java 好还是学 C++ 好。读完本文后,我们可以从自身情况、未来的发展,岗位需求量…

Windows安装Elasticsearch 7.9.2

1 下载 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-windows-x86_64.zip 2 配置 进入config目录&#xff0c;打开elasticsearch.yml文件&#xff0c;给集群和节点配置名称。 cluster.name: my-es node.name: node-1 3 启动 打开bin目录&am…

​第三方支付方式有哪些?

​第三方支付方式有哪些&#xff1f; 编辑搜图 请点击输入图片描述&#xff08;最多18字&#xff09; 随着电子商务和移动互联网的快速发展&#xff0c;第三方支付方式已经成为我们生活中不可或缺的一部分。这些支付方式不仅为我们提供了方便快捷的交易途径&#xff0c;还在保…

iOS - 多线程-atomic

文章目录 iOS - 多线程-atomic1. 源码分析1.1 get方法1.2 set方法 2. 一般不使用atomic的原因 iOS - 多线程-atomic atomic用于保证属性setter、getter的原子性操作&#xff0c;相当于在getter和setter内部加了线程同步的锁可以参考源码objc4的objc-accessors.mm它并不能保证使…

为AI电脑生态注入强悍动力,安耐美PlatiGemini 1200W高性能电源

在DIY攒机的过程中&#xff0c;电源是非常重要的一环&#xff0c;现在高性能的硬件功耗往往很高&#xff0c;因此一款优秀的电源整个系统稳定运行的基石。最近&#xff0c;我发现一款由安耐美&#xff08;Enermax&#xff09;推出的PlatiGemini 1200W电源&#xff0c;它不仅满足…

报错import build constraints exclude all Go files in

好久没用fyne突然报错 报错import ...go-gl.. build constraints exclude all Go files in go-gl .. 检查gcc --version正常输出 检查gcc版本正常&#xff0c;路径正常。 尝试解决的方法&#xff0c; 1.重新安装依赖&#xff0c;不行 2.重新配置下载地址&#xff0c;不…

警惕高薪诱惑,跳槽前必看的真相

在职场中&#xff0c;高薪常常被看做是衡量一份工作价值的标尺。不少求职者和职场人士在面对职业选择时&#xff0c;会将薪资待遇作为重要甚至决定性的参考因素。然而&#xff0c;盲目追求高薪而轻易跳槽&#xff0c;并非总是明智之举。今天&#xff0c;我们就来探讨一下为何“…

【Vue】自定义事件实现组件之间的通信(案例讲解)

一、前言 这是部分哔哩哔哩上跟着一个博主【遇见狂神说】学习的&#xff0c;当然自己也是才开始学习的vue&#xff0c;在学到这个Vue的自定义事件的时候&#xff0c;虽然知识点很绕&#xff0c;但是在理解后又觉得很意思&#xff0c;觉得Vue真的很强大。这里博主将自己学习到的…

车载电子电器架构 —— 功能安全开发(首篇)

车载电子电器架构 —— 功能安全开发 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己…

【后端】git与python的结合使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、git介绍二、git常见使用三、git与python的结合使用四、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人会主动学习使用一些开发…

【3GPP】【核心网】【5G】5G核心网协议解析(四)(超详细)

1. 欢迎大家订阅和关注&#xff0c;精讲3GPP通信协议&#xff08;2G/3G/4G/5G/IMS&#xff09;知识点&#xff0c;专栏会持续更新中.....敬请期待&#xff01; 目录 1. NGAP 按流程功能分类 1.1 接口管理过程 1.1.1 NG Setup 1.2.1 NAS消息传输过程 Transport of NAS Messa…

初入数据库

SQL&#xff1a;操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库的统一标准。 DDL&#xff08;Data Definition Language&#xff09;数据定义语言 数据库 show databases;create database db01;use db01;select database(); 显示当前使用的数据库drop d…

盲人导航手机:科技之光点亮无碍出行新纪元

作为一名资深记者&#xff0c;我有幸见证了科技如何跨越障碍&#xff0c;赋予特殊群体更为自由、便捷的生活方式。今天&#xff0c;我想向您详细介绍一款专为盲人群体设计的导航应用&#xff0c;蝙蝠避障&#xff0c;它以盲人导航手机这一创新概念&#xff0c;让视障人士在出行…

03-JAVA设计模式-访问者模式

访问者模式 什么是访问者模式 访问者模式&#xff08;Visitor Pattern&#xff09;是软件设计模式中的一种行为模式&#xff0c;它用于将数据结构中的元素与操作这些元素的操作解耦。这种模式使得可以在不修改数据结构的情况下添加新的操作。 在访问者模式中&#xff0c;我们…

【FPGA】优化设计指南(二):性能指标

目录 设计可运行的最高频率输入到输出的时钟周期数资源利用率和功耗 设计可运行的最高频率 Fmax可通过时序报告计算得出。在Vivado中&#xff0c;可通过命令report_timing_summary生成时序报告.WNS越大越好. 输入到输出的时钟周期数 输入到输出的延迟通常用时钟周期个数来表…

制作github.io学术个人主页

制作如图的学术个人主页。About me - Xianwen Ling’s Blog 学术个人主页是一个学者展示个人学术成果和研究方向的重要工具。个人主页可以集中展示学者的研究论文、出版物、演讲和发布的项目等学术成果&#xff0c;这样其他人可以更方便地了解和评估学者的研究贡献。个人主页可…