字符串匹配
主字符串s模式字符串t字符串匹配就是找出字符串t首次出现在s的下标位置1BF算法暴力算法概述根据平时的经验将模式字符串从头开始一个个与主字符串比对需要两层循环外层循环是控制主字符串要和模式字符串匹配时的起点内层循环便是每次都要将模式字符串从头开始遍历。这样的算法时间复杂度高2KMP算法时间复杂度低常用概述主要是求解模式字符串t的next根据模式字符串的next数组在匹配时进行移动。求解next的方法1下标从1开始默认next[1]0next[2]1;2从第3个元素开始计算next值。首先是看这个元素的前一个元素对应的next值找第next个元素(记作)是否和这个相等或者说一样如果相等则该元素对应的next是其前一个元素对应的next值1如果不相等则需要继续回溯找对应的next值找第next个元素的字符是否和一样如果一样那这个元素对应的next值等于此时找到的这个元素的所属位置就是在字符串中是第几个元素也可以说是这个元素的下标1的个数1如果还是没找到就继续回溯3但如果知道回溯到第一个元素也不相等的话我们就让这个元素的next0。匹配的方法1设置代表两个字符串的下标i,j分别设置为1不要搞混因为next的下标我们是从0开始的但字符串的下标是从0开始的这里设置1之后后续需要注意-12开始遍历两个字符串如果对应的字符相等下标分别向后移动继续对比3如果不等这时候需要借助我们的next。我们首先是需要保持我们主字符的下标i保持不动将模式字符的下标jnext[j]意思就是将下标j设置为此时字符对应的next值之后主字符从i,模式字符从新的对应下标为j的元素开始遍历对比遇到不一样的继续保持i不变jnext[j]需要注意如果遇到j0那么需要将i和j同时14当i或者j的大小超过我们所给对应的字符长度的时候遍历就结束了。结束之后我们可以对比j和模式字符串的长度如果j大于模式字符串的长度说明模式字符串已经被匹配上了那么返回(i-模式字符串的长度因为i此时的位置是与模式字符串匹配到尾对应的个数要返回匹配成功的第一个元素的下标。#include stdio.h #include string.h #include stdlib.h //被查找的字符串为模式串我们就是要查找模式串第一次出现在字符串的位置 //朴素匹配 int strMatch(char *str,char *pattern){ int nstrlen(str); int mstrlen(pattern); for(int i0;i(n-m);i){ int j0; while(jm){ if(str[i]pattern[j]){ i; j; }else{ ii-j; break; } } if(jm){ return i-j; } } return -1; } //KMP算法 //基于模式串确定next数组利用next数组完成字符串匹配在匹配过程中发生字符不匹配中next数组用俩帮助确定下一次的匹配位置 void get_next(char *s,int *next){ next[1]0; next[2]1; int nstrlen(s); int i3; int knext[i-1]; while(in){ if(s[k-1]s[i-1]){ next[i]next[i-1]1; knext[i]; i; }else{ knext[k]; if(k0){ next[i]1; knext[i]; i; } } } } int PiPei(char *s1,char *s2){ int *next(int *)malloc(sizeof(int)*strlen(s2)); get_next(s2,next); int index11,index21; int len1strlen(s1),len2strlen(s2); while(index1len1index2len2){ if(s1[index1-1]s2[index2-1]){ index1; index2; }else{ index2next[index2]; if(index20){ index1; index2; } } } if(index2len2){ return index1-len2-1; }else{ return -1; } } int main(){ char s1[]abcbbabc; char s2[]ba; strstr(s1,s2);//返回s2在s1第一次出现的位置 printf(\n); printf(%p\n,strstr(s1,s2));//对应输出的地址 for(int i0;i3;i){ printf(%p ,s1[i]); } //朴素匹配 int posstrMatch(s1,s2); printf(%d\n,pos); printf(%d\n,PiPei(s1,s2)); }

相关新闻

深入pdfcn Registry机制:shadcn CLI如何用一条命令安装PDF组件

深入pdfcn Registry机制:shadcn CLI如何用一条命令安装PDF组件

深入pdfcn Registry机制:shadcn CLI如何用一条命令安装PDF组件 【免费下载链接】pdfcn Beautiful pdf components, built on Takumi and Forme. 100% Free, Zero config, one command setup. 项目地址: https://gitcode.com/gh_mirrors/pd/pdfcn pdfcn 是一款…

2026/10/3 20:02:45 阅读更多 →
Adobe 软件安装提示msvcp110.dll 缺失怎么办?手把手教你搞定

Adobe 软件安装提示msvcp110.dll 缺失怎么办?手把手教你搞定

正文先说结论:双击 Adobe 弹「无法启动此程序,因为计算机中丢失 msvcp110.dll」,软件本身没坏,缺的是它启动时要调用的 Visual C 2012 运行库。这个 dll 缺失问题十分钟内能修好,前提是走对路。报错里的 dll 对应哪个运…

2026/10/3 20:02:44 阅读更多 →
Leadfeeder 自动化实战指南:在 awesome-claude-skills 中通过 Rube MCP 驱动 Leadfeeder 工具集

Leadfeeder 自动化实战指南:在 awesome-claude-skills 中通过 Rube MCP 驱动 Leadfeeder 工具集

AI 技能AI 插件人工智能工作流自动化 【免费下载链接】awesome-claude-skills A curated list of awesome Claude Skills, resources, and tools for customizing Claude AI workflows 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-claude-skills 点击…

2026/10/3 20:02:44 阅读更多 →

最新新闻

DeepSeek Harness 开源贡献手记:从零到合入主线

DeepSeek Harness 开源贡献手记:从零到合入主线

1. 引言:为什么参与开源贡献 本文记录我参与 DeepSeek Harness 开源项目的完整过程,从发现问题、定位源码、编写补丁到最终合入主线的真实经历,希望能为同样想参与开源贡献的开发者提供一份可参考的路线图。 2. 项目背景与初步调研 在动手…

2026/10/3 20:40:42 阅读更多 →
面试官:MySQL中的 distinct 和 group by 哪个效率更高?

面试官:MySQL中的 distinct 和 group by 哪个效率更高?

一、开篇:一道高频面试题背后的问题在 MySQL 相关的面试中,有一道题经常被面试官问到:distinct 和 group by 都能去重,它们哪个效率更高?很多候选人听到这个问题后会下意识地回答「distinct 更快,因为它的语…

2026/10/3 20:40:42 阅读更多 →
面试官:BIO、NIO、AIO 的区别是什么?

面试官:BIO、NIO、AIO 的区别是什么?

一、开篇:从一个面试场景说起面试官经常会抛出一个看似简单、实则非常考察底层功底的题目:「说说 BIO、NIO、AIO 的区别」。很多同学能背出「BIO 是阻塞、NIO 是非阻塞、AIO 是异步非阻塞」,但如果继续追问「为什么 NIO 是非阻塞的」「底层分…

2026/10/3 20:40:41 阅读更多 →
Python实现绘制同切圆

Python实现绘制同切圆

程序源码:# 绘制同切圆 import turtle as t # 导入turtle绘图库,取别名t t.pensize(3) # 设置画笔粗细为3像素 t.circle(10) # 画半径为10的圆 t.circle(20) # 画半径为20的圆 t.circle(40) …

2026/10/3 20:39:41 阅读更多 →
数据管理与论文写作并行:按阶段推进的研究节奏怎么排

数据管理与论文写作并行:按阶段推进的研究节奏怎么排

数据工作和论文写作挤在同一段时间里,几乎是每位研究生都会遇到的排期难题。多数人卡住的不是不会写,而是两条线的节拍没有对齐。我们在梳理用户反馈时发现,把研究数据与论文写作按成熟度切成四段、给每段设定明确的两线配比,返工…

2026/10/3 20:39:41 阅读更多 →
双向分流FIN标记、TCB服务逻辑与TCP断开连接流程介绍

双向分流FIN标记、TCB服务逻辑与TCP断开连接流程介绍

文章目录 一、TCP双向分流里的FIN 1.FIN信息 1.1放置FIN 1.1.1处前预剩发 1.1.2处后被遗漏 1.2发送FIN 1.2.1剩余已发完 1.2.2独立仍接收 1.3接收FIN 1.3.1现在已收完 1.3.2独立仍在发 二、数据的需求与TCB的服务 1.数据需求TCB的发收服务 1.1需本端TCB可靠发送 …

2026/10/3 20:39:40 阅读更多 →

日新闻

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南 【免费下载链接】ex-skill 前任 skill 项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill 前任.skill 是一个运行在 Claude Code 上的开源 Skill:导入微信、iMessage、短信、…

2026/10/3 0:00:27 阅读更多 →
45个经典Linux面试题:从命令到网络排障的完整考点解析

45个经典Linux面试题:从命令到网络排障的完整考点解析

刚开始带应届生的时候,我最头疼的就是他们拿着一摞Linux面试题背得滚瓜烂熟,一上机全露馅。后来自己从被面的人变成面别人的人,才慢慢摸清楚:Linux面试题考的根本不是答案本身,而是你面对一个不确定的系统问题时&#…

2026/10/3 0:01:28 阅读更多 →
SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

简介:本资源是一份面向SAP ABAP开发人员、生产计划专员及ERP实施顾问的实操型操作指南,聚焦SAP生产预留核心业务场景,系统解决物料预留创建、查询、校验与批量处理等高频问题。文档以结构化方式覆盖预留背景原理、OMC2编码规则、工厂级参数配…

2026/10/3 0:01:28 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 9:14:33 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 9:47:50 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/3 9:42:31 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →