Kimi    LeetCode 3303. 第一个几乎相等子字符串的下标 C语言实现
以下是 LeetCode 3303 的 C 语言实现使用 Z-FunctionZ 数组 算法c#include string.h// 计算 Z-Function 数组// z[i] 表示 s[i..n) 与 s[0..n) 的最长公共前缀长度static void zFunction(const char *s, int n, int *z) {int l 0, r 0;z[0] 0;for (int i 1; i n; i) {if (i r) {z[i] (r - i z[i - l]) ? r - i : z[i - l];} else {z[i] 0;}while (i z[i] n s[z[i]] s[i z[i]]) {z[i];}if (i z[i] r) {l i;r i z[i];}}}int minStartingIndex(char *s, char *pattern) {int n strlen(s);int m strlen(pattern);// 正向匹配pattern sint len1 m n;char *str1 (char *)malloc((len1 1) * sizeof(char));strcpy(str1, pattern);strcpy(str1 m, s);int *z1 (int *)malloc(len1 * sizeof(int));zFunction(str1, len1, z1);// 反向匹配reverse(pattern) reverse(s)int len2 m n;char *str2 (char *)malloc((len2 1) * sizeof(char));// 反转 patternfor (int i 0; i m; i) {str2[i] pattern[m - 1 - i];}// 反转 sfor (int i 0; i n; i) {str2[m i] s[n - 1 - i];}str2[len2] \0;int *z2 (int *)malloc(len2 * sizeof(int));zFunction(str2, len2, z2);int result -1;// 枚举每个可能的起始位置 ifor (int i 0; i n - m; i) {// z1[m i]从 s[i] 开始正向匹配 pattern 的最长前缀长度// z2[n - i]从 s[i] 末尾反向匹配 pattern 的最长后缀长度// 两者之和 m - 1 说明中间最多只有 1 个字符不匹配if (z1[m i] z2[n - i] m - 1) {result i;break;}}free(str1);free(z1);free(str2);free(z2);return result;}关键点要点 说明malloc free C 中需手动管理内存计算完 Z 数组后及时释放字符串拼接 用 strcpy 将 pattern 和 s 拼接到新分配的缓冲区反向构造 分别反转 pattern 和 s 后拼接避免多次调用 strrevz1[m i] z2[n - i] 正向前缀 反向后缀覆盖 m-1 个字符即汉明距离 ≤ 1复杂度- 时间复杂度O(n m)两次 Z-Function 均为线性遍历- 空间复杂度O(n m)两个拼接字符串和两个 Z 数组与 Java 版本的区别C 语言没有内置字符串反转和动态数组需要手动1. malloc 分配拼接字符串的内存2. 循环反转字符构造反向字符串3. 手动 free 释放所有动态分配的内存核心算法逻辑Z-Function 双数组匹配与 Java/其他语言完全一致。

相关新闻

X-AnyLabeling实战:从模型适配到环境配置的避坑指南

X-AnyLabeling实战:从模型适配到环境配置的避坑指南

1. 模型文件转换与配置实战 第一次用X-AnyLabeling加载自定义YOLOv8分割模型时,模型转换这个环节就给我来了个下马威。虽然Ultralytics官方文档写得挺详细,但实际操作中还是有不少细节需要注意。这里分享下我踩过的坑和验证可行的解决方案。 先说模型转换…

2026/6/19 11:51:05阅读更多 →
生信可视化:零代码在线生成序列Logo图

生信可视化:零代码在线生成序列Logo图

1. 序列Logo图:生物信息学的"条形码扫描仪" 第一次看到序列Logo图时,我把它想象成超市商品的条形码——每个位置上的碱基或氨基酸就像条形码的黑白条纹,只不过这里用不同高度和颜色的字母来展示序列特征。这种诞生于1990年的可视化…

2026/6/19 11:51:05阅读更多 →
如何用Mermaid Live Editor快速创建专业图表:免费在线编辑终极指南

如何用Mermaid Live Editor快速创建专业图表:免费在线编辑终极指南

如何用Mermaid Live Editor快速创建专业图表:免费在线编辑终极指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid…

2026/6/19 11:51:05阅读更多 →
Chamfer Distance:从公式到实战,解析3D点云相似度度量

Chamfer Distance:从公式到实战,解析3D点云相似度度量

1. Chamfer Distance是什么?为什么它如此重要? 想象一下你面前有两堆沙子,一堆是你精心堆砌的沙堡,另一堆是海浪冲刷后的残骸。如何量化这两堆沙子的形状差异?这就是Chamfer Distance(CD)要解决…

2026/6/19 13:06:13阅读更多 →
OpenCV+Keras实现手写体单词精准定位

OpenCV+Keras实现手写体单词精准定位

1. 项目概述:用OpenCVKeras在百年手写体中精准定位目标单词我干这行十多年,经手过上百个图像识别类项目,从工业质检到古籍数字化,最常被低估的其实是“小而精”的场景——不是训练一个能认全字母表的大模型,而是让算法…

2026/6/19 13:06:13阅读更多 →
5个鼠标魔法技巧:让普通鼠标在macOS上超越苹果触控板的完整指南

5个鼠标魔法技巧:让普通鼠标在macOS上超越苹果触控板的完整指南

5个鼠标魔法技巧:让普通鼠标在macOS上超越苹果触控板的完整指南 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 你是否觉得在macOS上…

2026/6/19 13:06:13阅读更多 →
如何快速突破网盘限速:开源下载助手的完整指南

如何快速突破网盘限速:开源下载助手的完整指南

如何快速突破网盘限速:开源下载助手的完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / …

2026/6/19 13:06:13阅读更多 →
如何用Electron和WebTorrent技术构建游戏启动器:FitGirl-Repack-Launcher深度解析

如何用Electron和WebTorrent技术构建游戏启动器:FitGirl-Repack-Launcher深度解析

如何用Electron和WebTorrent技术构建游戏启动器:FitGirl-Repack-Launcher深度解析 【免费下载链接】Fitgirl-Repack-Launcher An Electron launcher designed specifically for FitGirl Repacks, utilizing pure vanilla JavaScript, HTML, and CSS for optimal per…

2026/6/19 13:06:13阅读更多 →
应急响应优化:动态路网+建筑级定位+人机协同决策实战

应急响应优化:动态路网+建筑级定位+人机协同决策实战

1. 项目概述:这不是一次普通的流程优化,而是一场面向真实街巷的响应效率革命“Optimizing Emergency Response in Calgary”——这个标题乍看像一份市政报告的副标题,但在我过去十年跑遍加拿大西部十几个城市应急指挥中心、参与过三次省级应急…

2026/6/19 13:01:13阅读更多 →
Photobucket付费墙背后:5美元买童年回忆却落得一场空!

Photobucket付费墙背后:5美元买童年回忆却落得一场空!

1. 付费墙初现如今身处万亿市值公司林立的时代,我们也不能轻易放弃5美元。就像Photobucket,它曾相当于过去的Imgur,我们小时候常把图片上传到这个网站,然后在各种论坛上分享链接,它简单好用,尽职尽责。但最…

2026/6/19 0:04:37阅读更多 →
如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南

如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南

如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live…

2026/6/19 0:04:37阅读更多 →
yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南

yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南

yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南 【免费下载链接】yuzu 项目地址: https://gitcode.com/GitHub_Trending/yuz/yuzu yuzu作为目前最流行的开源Nintendo Switch模拟器,不仅提供了完整的游戏运行环境,还内…

2026/6/19 0:04:37阅读更多 →