C语言 | Leetcode C语言题解之第187题重复的DNA序列

news2024/10/6 8:25:17

题目:

题解:

#define MAXSIZE 769/* 选取一个质数即可 */
typedef struct Node 
{
    char    string[101];
    int     index;
    struct Node *next;  //保存链表表头
} List;

typedef struct 
{
    List *hashHead[MAXSIZE];//定义哈希数组的大小
} MyHashMap;

List * isInHash(List *list,char * stringKey) 
{
    List *nodeIt = list;
    //通过链表下遍历
    while (nodeIt != NULL) 
    {
        if (strcmp(stringKey, nodeIt->string)== 0 ) 
        {
            return nodeIt;
        }
        nodeIt = nodeIt->next;
    }
    return NULL;
}

MyHashMap* myHashMapCreate() 
{
    int i;
    MyHashMap* newHash= (MyHashMap* )malloc(sizeof(MyHashMap));
    /* 对链表的头结点赋初值 */
    for (i = 0; i < MAXSIZE; i++)
    {
        newHash->hashHead[i] = NULL;
    }
    return newHash;
}

int myHashID(char * str)
{
    long h = 0;
    for(int i = 0; i < strlen(str); i++)
    {
        h = (h * 26 % MAXSIZE + str[i] - 'A') % MAXSIZE; 
        // 字符串的hashcode, 权为26是因为小写字母,不限制时为128,这样能够让结点尽可能分布均匀,减少地址冲突
        // 取模是为了防止int型溢出
    }
    return h % MAXSIZE;
}


void myHashMapPut(MyHashMap* obj, char* stringKey,int index) 
{
    //一定不再这里面
    List * it= isInHash(obj->hashHead[myHashID(stringKey)],stringKey);
    if(it != NULL)
    {
        //在表里面更新键值
        it->index = index;
    }
    else
    {
        //不在表里面
        List *newNode       = (List*)malloc(sizeof(List));
        strcpy(newNode->string , stringKey);
        newNode->next       = NULL;
        newNode->index      = index;
        if(obj->hashHead[myHashID(stringKey)] != NULL)
        {
            //当前头链表不为空,则需要将后续的链表接上
            //需要主要这里表头也代表一个数据的值
            newNode->next = obj->hashHead[myHashID(stringKey)];
        }
        //修改头链表
        obj->hashHead[myHashID(stringKey)] =  newNode;
    }
}

int myHashMapGet(MyHashMap* obj, char* stringKey) 
{
    List * it= isInHash(obj->hashHead[myHashID(stringKey)],stringKey);
    if( it!= NULL)
    {
        return it->index;
    }
    return -1;
}

void myHashMapFree(MyHashMap* obj) 
{
   int i;
   List *freeIt;
   List *curIt;
   for (i = 0; i < MAXSIZE; i++)
    {
        if(obj->hashHead[i] != NULL)
        {
            freeIt = NULL;
            curIt  = obj->hashHead[i];
            
            while(curIt != NULL)
            {
                freeIt = curIt;
                curIt= curIt->next;
                free(freeIt);
            }
            obj->hashHead[i]= NULL;
        }
    }
    free(obj);
}


char ** findRepeatedDnaSequences(char * s, int* returnSize)
{
    char* stringKey = (char * )malloc(sizeof(char ) * 11);
    int len = strlen(s);
    if(len < 10)
    {
        *returnSize = 0;
        return NULL;
    }

    MyHashMap * hsahMap = myHashMapCreate();
    int maxCount = 0;
    for(int i = 10; i <= len; i++)
    {
        memcpy(stringKey, &s[i-10], 10);
        stringKey[10] = '\0';
        int count = myHashMapGet(hsahMap, stringKey);
        if(count == -1)
        {
            count = 1;
            
        }
        else
        {
            count++;
        }
        myHashMapPut(hsahMap,stringKey,count);
        maxCount = fmax(maxCount, count);
    }

    if(maxCount < 2)
    {
        *returnSize = 0;
        return NULL;
    }

    *returnSize = 0;
    char ** returnMatStr = (char ** )malloc(sizeof(char *) * len);
    int i;
    List *freeIt;
    List *curIt;
    for (i = 0; i < MAXSIZE; i++)
    {
        if(hsahMap->hashHead[i] != NULL)
        {
            freeIt = NULL;
            curIt  = hsahMap->hashHead[i];
            
            while(curIt != NULL)
            {
                freeIt = curIt;
                curIt= curIt->next;
                if(freeIt->index == maxCount)
                {
                    returnMatStr[*returnSize] = (char * )malloc(sizeof(char ) * 11);
                    strcpy(returnMatStr[*returnSize],  freeIt->string);
                    *returnSize = *returnSize + 1;
                }
                free(freeIt);
            }
            hsahMap->hashHead[i]= NULL;
        }
    }
    free(hsahMap);
    return returnMatStr;
}

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

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

相关文章

【建设方案】大数据湖一体化建设方案(ppt原件)

1、背景&#xff1a;大数据湖的发展背景与建设理念 2、体系&#xff1a;大数据湖体系规划与建设思路 3、生态圈&#xff1a;探索新兴业务入湖建设模式 4、共享&#xff1a;大数据湖统一访问共享规划 5、运营&#xff1a;大数据湖一体化运营管理建设 &#xff08;本方案及更多方…

交通大数据分析与挖掘实训【对提供的CSV格式数据使用pandas库分析-Matplotlib库绘图】

背景&#xff1a; 《交通大数据分析与挖掘》实训 指 导 书 编著 二○二四年五月 一、实训目的 1、掌握python开发环境&#xff08;如Anaconda&#xff09;及Numpy等常见第三方库的使用&#xff1b; 2、熟悉Anaconda在线编程平台&#xff0c;学会基本的python程序编写…

CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中

CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中 code review! 文章目录 CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中1.CMAKE_INSTALL_PREFIX详解变量作用设置 CMAKE_INSTALL_PREFIX示例影响范围常见用法特别…

OpenHarmony 应用开发FullSDK获取与替换

DevEco Studio是OpenHarmony应用集成开发环境。public-SDK是提供给应用开发的工具包&#xff0c;跟随DevEco Studio下载&#xff0c;不包含系统应用所需要的高权限API。full-SDK是提供给OEM厂商开发应用的工具包&#xff0c;不能随DevEco Studio下载&#xff0c;包含了系统应用…

了解请求参数与响应参数的区别:初学者指南

在 Web 的开发领域&#xff0c;无论你是前端开发还是后端开发人员&#xff0c;把握请求与响应参数的核心差异是极其重要的。这些参数在客户端和服务器之间的互动中扮演着关键角色。 请求参数的定义及类别 定义 当客户端向服务器提交信息时所使用的数据被称为请求参数。这些参…

Fine-tuning在垂直领域的最佳实践指南

对于Fine-tuning是深度学习和机器学习领域一个特别重要的概念&#xff0c;并且每个企业的实践方式也会有所不同&#xff0c;今天我们就来聊一聊Fine-tuning。 什么是Fine-tuning Fine-tuning指的是模型微调&#xff0c;通常是指在一个预训练模型的基础上&#xff0c;通过在特…

【剖析】为什么说RBF神经网络的误差为0

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 机器学习中的模型非常的多&#xff0c;但如果要问有没有这样的一个模型&#xff0c;它的训练误差为0&#xff0c;那么就非RBF神经网络莫属了&#xff01;下面我们来聊聊&#xff0c;为什么RBF神经网络的训练误差为0。…

Springboot多模块项目从0构建打包运行

今天复习了一下Springboot的多模块的构建&#xff0c;其实一直以来都对单体项目使用多模块感到不太理解&#xff0c;不知道到底有什么样的优势&#xff0c;目前切身体会到的优势就是确实可以让依赖的划分更加清晰&#xff08;每个模块下的pom文件只引入该模块需要的依赖&#x…

数据分析的线上云端数据库搭建及Excel和Tableau连接

数据分析的线上云端数据库搭建及Excel和Tableau连接 SQL基础知识 线上SQL训练&#xff1a; SQlZOO: https://www.sqlzoo.net/wiki/SQL_Tutorial 牛客网SQL真题&#xff1a;https://www.nowcoder.com/ta/sql select,from,where, order by, limit, group by, having, substr(),…

HTML 之<title> 标签

一.HTML <title> 标签 二.实例 为您的 HTML 文档定义标题&#xff1a; <html> <head> <meta charset"utf-8"> <title>文档标题</title> </head> <body> 文档内容...... </body> </html> 尝试一下 三…

[问题记录]Qt QGraphicsItem 移动时出现残影

目录 1.问题现象 2.问题原因 3.修改方案 1.问题现象 自定义 QGraphicsItem 时&#xff0c;绘制rect&#xff0c;对象移动时出现残影。 2.问题原因 直接原因是view未刷新的问题&#xff0c;所以网上有人使用方案 setViewportUpdateMode(QGraphicsView::FullViewportUpdate…

周末设计高端企业_集团官网主题Discuz模板

风格名称: 周末设计_高端企业_集团官网 适用版本: Discuz! X3.0、X3.1、X3.2、X3.3、F1.0 风格编码: 使用语言包结构&#xff0c;适合全部编码 周末设计高端企业_集团官网主题Discuz模板

黑苹果EFI详细配置说明

先上网址: https://dortania.github.io/OpenCore-Install-Guide/installer-guide/opencore-efi.html 1: 了解作用 ACPI作用: 总结: ACPI是UEFI引导方式和操作系统之间的硬件抽象接口,概述了硬件设备,如 USB 控制器、CPU 线程、嵌入式控制器、系统时钟等 硬件设备识别和驱动:…

html--好看的手机充值单页

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>线上充值-首页</title><meta content"widthdevice-width,initial-scale1.0,maximum-scale1.0,user-scalable0" name"viewport&…

【树形dp 换根法 BFS】2581. 统计可能的树根数目

本文涉及知识点 CBFS算法 动态规划汇总 图论知识汇总 树形dp 换根法 BFS LeetCode 2581. 统计可能的树根数目 Alice 有一棵 n 个节点的树&#xff0c;节点编号为 0 到 n - 1 。树用一个长度为 n - 1 的二维整数数组 edges 表示&#xff0c;其中 edges[i] [ai, bi] &#xf…

2.树莓派4b+ubuntu18.04(ros版本melodic)+arduino mega自制两轮差速小车,实现建图导航功能

这篇文章介绍arduino使用和安装arduino_bridge 将arduino与树莓派连接 查看arduino的端口号&#xff0c;我们这里查看到的时ttyUSB0 ll /dev/ttyUSB*将当前用户添加进dialout组 sudo usermod -a -G dialout your_user_name然后重启树莓派&#xff0c;然后才能生效 然后如果你…

【ajax核心02】底层原理-Promise对象

目录 一&#xff1a;promise对象是什么 二&#xff1a;语法&#xff08;Promise使用步骤&#xff09; 三&#xff1a;Promise-三种状态 一&#xff1a;promise对象是什么 Promise 对象代表异步操作最终的完成&#xff08;或失败&#xff09;以及其结果值。 即Promise对象是…

安卓逆向经典案例—H5appXX运维

H5app的class不一定是android.webkit.WebView 也可能是腾讯X5内核或者是uc webview 殊途同归也要去hook webview的系统函数和可调式方法setWebContentsDebuggingEnabled。突破sign算法&#xff0c;输出协议和加密算法的作用是什么&#xff1f;分析c-sign值 在加密的位置下断点 …

STM32单片机实现PWR多种模式

文章目录 1. PWR多种模式 2. 修改主频 2.1 main.c 3. 睡眠模式串口发送接收 3.1 Serial.c 3.2 Serial.h 3.3 main.c 4. 停止模式对射式红外传感器计次 4.1 CountSensor.c 4.2 CountSensor.h 4.3 main.c 5. 待机模式实时时钟 5.1 MyRTC.c 5.2 MyRTC.h 5.3 main.c…

【Spring】Spring Boot 快速入门

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…