C语言 | Leetcode C语言题解之第336题回文对

题目:

题解:

#define SIZE 9470
#define N 168000
#define P 13331typedef unsigned long long ULL;
ULL p[301];//p[i]存储P^ivoid init()//初始化p进制次幂数组
{int i;p[0]=1;for(i=1;i<300;i++){p[i]=p[i-1]*P;}
}int** palindromePairs(char**words, int wordsSize, int* returnSize, int** returnColumnSizes){int **re=(int **)malloc(sizeof(int *)*N);*returnColumnSizes=(int *)malloc(sizeof(int)*N);int i,j,k;int index=0;int len;int l,r;int hash[SIZE];//存储某字符串hash值在words中的对应下标ULL key[SIZE];//存储字符串hash值,可近似认为字符串与hash值之间是一一对应的ULL t;ULL pre[301];//存储前缀字符串hash值,pre下标从1开始(即pre[i]存储某字符串前i个子字符串的哈希值),注意下标转换char *word=NULL;init();//初始化p数组memset(hash,-1,sizeof(hash));for(i=0;i<wordsSize;i++){t=0;word=words[i];for(j=strlen(word)-1;j>=0;j--)//倒序遍历计算哈希值t{t=t*P+word[j];}//第二层哈希,将hash值及对应下标存入哈希表j=t%SIZE;while(hash[j]!=-1){j=(j+1)%SIZE;}hash[j]=i;key[j]=t;}for(i=0;i<wordsSize;i++){word=words[i];len=strlen(word);pre[0]=0;for(j=0;j<len;j++)//计算前缀哈希值数组{pre[j+1]=pre[j]*P+word[j];}for(j=-1;j<len;j++)//正向查找回文串{for(l=0,r=j;l<r;l++,r--){if(word[l]!=word[r]){break;}}if(l>=r)//下标0-j是一个回文串,查找原字符串数组中是否存在j+1-末尾的翻转字符串{t=pre[len]-pre[j+1]*p[len-j-1];//j+1-末尾子字符串的哈希值k=t%SIZE;while(hash[k]!=-1&&key[k]!=t){k=(k+1)%SIZE;}if(hash[k]>=0&&hash[k]!=i)//找到了且不是自身{re[index]=(int *)malloc(sizeof(int)*2);re[index][0]=hash[k];re[index][1]=i;returnColumnSizes[0][index++]=2;if(words[hash[k]][0]==0)//空字符串,特处{re[index]=(int *)malloc(sizeof(int)*2);re[index][0]=i;re[index][1]=hash[k];returnColumnSizes[0][index++]=2;}}}}for(j=len-1;j>0;j--)//反向查找回文串{for(l=j,r=len-1;l<r;l++,r--){if(word[l]!=word[r]){break;}}if(l>=r)//下标j-末尾子字符串是回文串{t=pre[j];//前j-1个子字符串的hash值k=t%SIZE;while(hash[k]!=-1&&key[k]!=t){k=(k+1)%SIZE;}if(hash[k]>=0&&hash[k]!=i)//找到了且不是自身{re[index]=(int *)malloc(sizeof(int)*2);re[index][0]=i;re[index][1]=hash[k];returnColumnSizes[0][index++]=2;}}}}*returnSize=index;return re;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索 Resolume Arena 7 - 引领 VJ 音视频创作的卓越软件

Resolume Arena 7 是一款专为 Mac 和 Windows 系统设计的强大 VJ 音视频软件&#xff0c;为创意专业人士和爱好者提供了丰富而出色的功能。 这款软件拥有直观且用户友好的界面&#xff0c;即使对于初学者来说&#xff0c;也能快速上手并开始创作。其强大的媒体管理功能&#x…

SpringBoot事务-调度-缓存

一.Spring Boot中的事务管理 设置事务 Transactional(isolation Isolation.DEFAULT) Transactional(propagation Propagation.REQUIRED) 开启事务 EnableTransactionManagement 1. 开启事务管理 要开启 Spring 的事务管理&#xff0c;你需要在你的 Spring Boot 应用中添加 …

大数据技术现场工程师特色实训室解决方案

一、引言 在大数据时代背景下&#xff0c;数据已成为新的生产要素&#xff0c;驱动着各行各业的创新发展。面对这一趋势&#xff0c;市场对于既掌握大数据理论知识又具备实战能力的大数据技术人才的需求急剧增加。为了应对这一挑战&#xff0c;唯众精心设计了一套全面的大数据…

详解golang内存管理

介绍 要搞明白 Go 语言的内存管理,就必须先理解操作系统以及机器硬件是如何管理内存的。因为 Go 语言的内部机制是建立在这个基础之上的,它的设计,本质上就是尽可能的会发挥操作系统层面的优势,而避开导致低效情况。 操作系统内存管理 其实现在计算机内存管理的方式都是…

FPGA资源评估

FPGA资源评估 文章目录 FPGA资源评估前言一、资源评估1.1 资源有哪些1.2 资源统计 二、 FPGA 的基本结构三、 更为复杂的 FPGA 架构 前言 一、资源评估 大家在项目中一般会要遇到需要资源评估的情况&#xff0c;例如立了新项目&#xff0c;前期需要确定使用什么FPGA片子&…

RabbitMQ消息队列总结

RabbitMQ那些事 参考一. `RabbitMQ`介绍1.1 Java工程师1.1.1 RabbitMQ学习目标1.1.2 消息队列介绍1.1.3 RabbitMQ介绍各自属性介绍(❤❤❤)二. `RabbitMQ`安装1. 基于Linux1.1 安装1.2 常用命令1.3 后台管理开启与面板介绍三. 客户端`SDK`操作(❤❤了解)1. 客户端依赖1. 生产者…

Springboot实现doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频在线预览功能,你学“废”了吗?

最近工作中&#xff0c;客户需要生成包含动态内容的word/pdf报告&#xff0c;并且需要在线预览。 刚开始使用后台直接生成word文档&#xff0c;返回文件流给前端&#xff0c;浏览器预览会发生格式错乱问题&#xff0c;特别是文档中的图片有些还不显示。 想到最简单的办法就是…

alibabacloud学习笔记13

微服务Docker镜像打包讲解 父项目怎么springboot版本依赖 每个子模块项目添加依赖 添加构建文件&#xff1a; 微服务Docker镜像打包整合JDK11 服务根目录创建dockerFile文件. dockerFile的内容。 构建镜像( 去到子模块pom文件下)&#xff1a; 要下载这个才能使用本地docker.…

Nginx--简介、安装、常用命令和配置文件

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、Nginx简介 1、nginx介绍 Nginx (engine x) 是一个高性能的 HTTP 和 反向代理 服务&#xff0c;也是一个IMAP/POP3/SMTP服务。因它的稳定性、丰…

RPC 和 HTTP 理解

网上充斥着各类类似于这样的文章&#xff1a;rpc 比 http 快了多少倍&#xff1f;既然有了 http&#xff0c;为什么还要用 rpc 调用等等。遇到这类文章&#xff0c;说明对 http 和 rpc 是由理解误区的。 这里再次重复强调一遍&#xff0c;通信协议不是 rpc 最重要的部分&#x…

【OpenCV 】插值的方法原理,图片缩放,矫正,边界填充

图像旋转 缩放 计算机中的图像是以数组的方式储存&#xff0c;每个位置储存了像素点的像素值。对图像进行旋转缩放&#xff0c;就是对数组进行操作&#xff0c;乘以对应的矩阵&#xff0c;进行空间变换&#xff0c;而矩阵的行列式的值&#xff0c;就是缩放的倍数。 进行缩放旋…

Erupt 项目搭建

创建Spring Boot项目 Maven依赖 Spring Boot版本为 2.7.10&#xff0c;erupt版本为 1.12.14 erupt版本要与Spring Boot版本适配&#xff0c;3.x.x版本Spring Boot暂不适用说是 <properties><erupt.version>1.12.14</erupt.version></properties> <…

AR 眼镜之-开关机定制-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 开关机定制 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;开机 Logo 2&#xff09;开机音效 3&#xff09;开机动画 4&#xff09;关机动画 5&#xff09;关机弹窗 2. &#x1f4a0; 开机 Logo…

Java基础——注释

在开发中注释是必不可少的&#xff0c;帮助我们更好的标记阅读代码&#xff0c;下面介绍几种常用的注释方式。 一、注释种类 1. 单行注释 使用//一行代码来进行注释&#xff0c;只能注释一行内容 2. 多行注释 使用斜杠星号的方式 /*注释多行代码*/&#xff0c;注释多行代…

ECharts 数据可视化 入门基本知识 下载安装常用的图表 【1】

ECharts一个基于 JavaScript 的开源可视化图表库&#xff0c;即将数据以图形或图像的方式展现成在屏幕上显示出来&#xff0c;这种方式称为数据可视化。数据可视化有助于我们分析数据&#xff0c;帮助我们更深入更直观的理解数据。今天回顾顺便总结一下echarts的基本知识&#…

C++密码管理器

先问一句 最近有几个关注我的原力等级为0或-1&#xff0c;文章全是转载&#xff0c;转载时间基本都在2021年&#xff0c;而且关注了很多人&#xff0c;这些是僵尸粉吗&#xff1f; 文末有投票&#xff0c;麻烦参与一下谢谢 实现功能列表 暂时还没做加密功能 打算用openssl/a…

HTTPS通讯全过程

HTTPS通讯全过程 不得不说&#xff0c;https比http通讯更加复杂惹。在第一次接触https代码的时候&#xff0c;不知道为什么要用用证书&#xff0c;公钥是什么&#xff1f;私钥是什么&#xff1f;他们作用是什么&#xff1f;非对称加密和对称加密是啥&#xff1f;天&#xff0c;…

可视化大屏入口界面,炫酷科技又不失简洁时尚。

可视化大屏界面&#xff0c;大家见到很多了&#xff0c;当可视化大屏是多个系统的融合&#xff0c;而且彼此又相互独立&#xff0c;就需要设计一个入口页面&#xff0c;便于分流客户&#xff0c;这次我给大家分享一批。 设计可视化大屏入口界面时&#xff0c;可以结合炫酷科技…

startData

某音startData 记得加入学习群&#xff1a; python爬虫&js逆向3 714283180

leetcode算法题之N皇后

N皇后也是一道很经典的问题&#xff0c;问题如下&#xff1a; 题目地址 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你…