KMP字符串匹配(1)

数据结构——串中kmp算法求模式串中next函数值 笔记 给定一个模式串,求next[j]值 求解方法: 1.第一位的next值为0 2.第二位的next值为1 后面求解每一位的next值时,根据前一位进行比较 3.第三位的next值:看第二位的模式串为b,对应的next值为1,则将第二位的模式串b与j=1的模式串进行比较,不同,则没有相同的字符串,值为1。 4.第四位的next值:看第三位的模式串为c,对应的next值为1,则将第三位的模式串c与j=1的模式串进行比较,不同,则没有相同的字符串,值为1. 5.第五位的next.. 阅读详情

近日看到一面试题写一个函数从字符串s中查找出子串t,并将t从s中删除。

这是考查KMP匹配算法,以前读书时学KMP总是一知半解,考完试基本都还给老师了,

唯一的印象就是KMP实现了匹配字符串指针不回溯,极大的提高了效率,

最近代码写的少拿此题练练手。

考虑当第k个字符失配的时候,sm+k+1≠tk+1时,有如下关系

sm+1sm+2…sm+k = t1t2…tk

下一次再比较时,指针不回溯,应该比较sm+k+1和t的哪个字符呢?

假设应该和ti比较,那么有如下关系

t1t2…ti-1 = sm+k-i+2sm+k-i+3…sm+k (i-1<k)

t1t2…ti-1 = tk-i+2tk-i+3…tk (i-1<k),这是字符串t自身的匹配关系,

当然这样的i可能不止一个,next[i]就是所有这样i里面的最大值,

i越大也意味着满足t1t2…ti-1 = tk-i+2tk-i+3…tk关系的k-i+2越小,

因此下一个需要比较的就是满足上述条件i的最大值,失配后t往右移动的距离最小,

字符串t第i个字符失配后sm+k+1应该和t的next[i]个字符继续比较。

举个具体例子s=“ababababababc“, t=“abababc“当s[6]=a与t[6]=c失配时,

s[6]应该和t[4]=a继续比较,再失配和t[2]=a比较,而不能先和t[2]=a比较,

这样如果原始字符串s=“ababababc“结果就不对了。

有了上述推理,不难写出匹配代码:

i,j分别指向s,t中某个字符,一直匹配,直到某字符失配后,j=next[j]继续比较,

如果next[j]=-1,表示第一个字符就不匹配,此时++i, 比较s的下一个字符,

tlen-j是字符串中待比较字符个数,循环退出条件是s中剩余字符小于t中待比较字符数。

while(i<=slen-tlen+j){

       if(s[i] == t[j]){

                  ++i;

                  ++j;

                  //find match string, erase it

                  if ( j == tlen){ 

                          strcpy(s+i-tlen, s+i);

                          slen -= tlen;

                          i -= tlen;

                          j = 0;

                  }

         }

         else{

                 if ( (j = next[j]) == -1 ){

                         ++i;

                         j = 0;

                       }

         }

}

 

 

第1关:实现朴素的字符串匹配 and 第2关:实现KMP字符串匹配 样例输入: string tri 样例输出: Location: 1 int FindSubStr(char* t, char* p) /* 从字符串t查找子字符串p。 字符串以数值结尾,例如p="str",那么p[0]='s',p[1]='t',p[2]='r',p[3]=0。 采用朴素的匹配算法。 返回子字符串第一次出现的位置,例如t="string ring",p="ring",则返回2。 若没有找到,则返回-1。 */ { // 请在此添加代码,补全函数FindSubStr /* 阅读详情

相关推荐

PTA 7-1 字符串模式匹配(KMP)

给定一个字符串 text 和一个模式串 pattern,求 pattern 在text 中的出现次数。text 和 pattern 中的字符均为英语大写字母或小写字母。text中不同位置出现的pattern 可重叠。

m0_63485942的博客 6916

KMP算法中的next函数

KMP算法详解看 http://www.matrix67.com/blog/archives/115    next[i]表示当模式串T[i]与主串失配时,模式串的索引回溯到next[i],主串的索引不变  下面串的下标均从0开始                              -1                                 i==0

跟acm say goodbye 984

Anaconda/Miniconda的删除和安装

要在 MacBook 上删除 Anaconda 或 Miniconda,并重新安装它,您可以按照以下步骤进行操作。

qq_27390023的博客 3026

模式匹配 KMP算法

#includeiostream>using namespace std;typedef struct String...{    char* str;    int length;};void getString(String s)...{    cin >> s.str;    s.length = strlen(s.str);}void  getNext(String pattarn, 

lesky的专栏 1008

汇川伺服驱动器参数优化实战指南

本文详细介绍了汇川伺服驱动器参数优化的实战技巧,涵盖控制模式选择、电子齿轮比调整、刚性匹配与振动抑制等关键内容。通过实际案例和实用技巧,帮助工程师快速掌握伺服驱动器参数调校方法,提升设备运行精度和稳定性。特别针对高精度定位和高速响应场景提供了专业指导。

weixin_29070721的博客 734

PMBus协议解析:基于I2C的电源管理实战与TMS320F28003x驱动开发

在嵌入式系统与服务器电源设计中,数字电源管理总线是实现高效、可靠电源监控与控制的关键技术。PMBus协议基于广泛应用的I2C总线物理层,通过定义标准化的命令集、数据格式与时序规范,为多路电源的电压电流监控、动态调整及故障处理提供了高效解决方案。其技术价值在于通过硬件自动处理协议解析、时钟拉伸与中断,显著降低软件复杂度,使开发者能聚焦于电源环路设计等核心逻辑。该协议广泛应用于服务器、通信基站及高性能计算板卡等场景,通过引入数据包错误检查、专用告警线等机制,确保了电源管理的可靠性。本文以TI TMS320F28

weixin_29189377的博客 374

KMP算法与优化(串的模式匹配)

KMP算法及优化,串的模式匹配算法。

我爱下午茶 1569

手写Socket Web服务器:深入HTTP协议底层原理

HTTP协议是Web通信的基石,其本质是一套严格定义的文本格式与状态交互规范。理解它需回归传输层——TCP连接建立、请求响应格式(如状态行、头/体分隔符\r\n\r\n)、字符编码与字节长度一致性等核心原理。这些知识直接决定CORS拦截、中文乱码、Content-Length错误等高频问题的排查效率。在现代框架封装日益厚重的今天,亲手用Socket实现一个可被Chrome识别的极简Web服务器,成为掌握Web运行机制最有效的实践路径。本文即以DebugLZQ经典案例为蓝本,还原从URI解析、DNS查询、So

weixin_40192258的博客 534

字符串匹配,1、暴力匹配,2、kmp匹配

package org.kmp.kmp; /** * 暴力匹配算法 * @author cjj_1 * @date 2020-09-07 9:13 */ public class KmpDemo { public static void main(String[] args) { // String str1 = "尚硅谷 尚硅股你尚硅 尚硅谷你尚硅谷你尚硅谷你好"; // String str2 = "尚硅谷你尚硅谷你"; // int inde

weixin_40128696的博客 161

[数字电路]用与非门实现BCD译码器驱动数码管

Hello,大家好。这里是xdd_core,好久不见。今天来和大家聊聊大一数字电路课程的一个课设。# Key word:BCD Decoder,Proteus8.x,NAND Gate,Digital Circuit# 流程:Proteus8.x仿真电路并绘制PCB导出Gerber文件打样,最终实物验证。# 以下为我对这个课设的report(里面对整个设计做了详细介绍,并设计了完整的验证电路) 感谢观看,仅供参考,未经作者允许,禁止转载/抄袭,本文已上传至数据库,查重必挂QAQ BCD to 7-Segme

xddcore的博客 6012

ESP32-BLE学习1-建立简单的server

start 学习之前,我想尝试使用ESP32的demo建立一个简单的server与手机接进行最基本的数据通信。 这里有BLE的简单讲解BLE资料 因为BLE的连接是具有主从机特性的,就像SPI,USB一些请求只能由主机端发起,连接也需要主机端发起。所以手机要想连上ESP32,就得将ESP32设置为从机模式。 从资料上可以看到,从机端通过Notify通知主机,所以从机就是GATT Server。 在进行ESP32 的demo学习之前,得大体看下ESP32的蓝牙组成,ESP32支持经典蓝牙和低功耗蓝牙4.2,

Spark的博客 1842

字符串匹配算法1-KMP

前面介绍过,字符串搜索一般来说有三种方式,前缀搜索,后缀搜索,子串搜索。KMP使用的是前缀搜索。 假设p的偏移是i,也就是窗口的位置是i,匹配到位置j+1时发现了不匹配。现在的问题是向前移动窗口到什么位置呢?注意要保证不漏掉可能的匹配,而且为了效率,应该尽量的多移动窗口。 先假设窗口移动到了位置k,看看有什么后果,这里i<k≤j+1,大于i好理解,至少移动一个字符嘛,为什么小于等于j...

weixin_30701575的博客 141

Gitee自动创建PR之——评审模式

一 创建PR的常规操作 本地更新主干(一般为master分支),基于主干新建一个分支并(如Dev分支)切换; 进行新的需求开发; 将这个分支推送到远端; 打开 Gitee ,进入创建 Pull Request 界面; 选定目标分支(及我们需要合并到主干分支的分支,一般即为我们的开发分支); 填写 Title 以及 Description; 点击提交 Pull Request。 二 更快的常见PR的方式— — 评审模式 现在 Gitee.

calm_encode的博客 2990

7-1 【模板】KMP字符串匹配

7-1 【模板】KMP字符串匹配 给出两个字符串text和pattern,其中pattern为text的子串,求出pattern在text中所有出现的位置。 为了减少骗分的情况,接下来还要输出子串的前缀数组next。 输入格式: 第一行为一个字符串,即为text。 第二行为一个字符串,即为pattern。 输出格式: 若干行,每行包含一个整数,表示pattern在text中出现的位置。 接下来1行,包括length(pattern)个整数,表示前缀数组next[i]的值,数据间以一个空格分隔,行尾无多余空格

qq_32639797的博客 1525

RV1126 ROS2环境交叉编译及部署(基于官方Docker)

我的所有基于`RV1126`的机器人项目都是在`Ubuntu22.04`下进行开发的,在`Ubuntu18.04 Docker`容器中实现`RV1126`的`SDK`编译,详细可参考我之前的博客[《Ubuntu20.04/22.04下Docker方案实现多平台SDK编译》第2章](https://blog.youkuaiyun.com/w1820020635/article/details/147342689),`RV1126`的`ROS1`部署没什么难度,可以参考我之前的博客,这里记录了`ROS2`交叉编译及问题解决

w1820020635的博客 1143

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

字符串模式匹配-KMP算法(1)

就回退一下,看“ABCDAB"当中有没有可以局部匹配的信息。最长公共串是AB2个长度,然后我们把子串的第2+1个元素后移到当前比对失败的元素的位置上,然后开始和主串比较。如果比到不相同了,就看此时比对好的子串的部分的除去当前和主串不一样的元素,前面的部分进行看,有没有最长公共子串,然后把子串的第(最长公共子串的长度+1)的元素后移到当前比对失败的元素的位置上。

ljy的博客 1254

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

字符串匹配-KMP算法(1)

不难想到,用两层for循环,一个遍历文本串,一个遍历模式串,就可以检测出这个模式串是否在文本串中出现过。但是这种算法的时间复杂度为O(m*n),n就是文本串的长度,m就是模式串的长度。

hahalalaba的博客 381

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

7-1 【模板】KMP字符串匹配 (20 分)

7-1 【模板】KMP字符串匹配 (20 分) 给出两个字符串text和pattern,其中pattern为text的子串,求出pattern在text中所有出现的位置。 为了减少骗分的情况,接下来还要输出子串的前缀数组next。 输入格式: 第一行为一个字符串,即为text。 第二行为一个字符串,即为pattern。 输出格式: 若干行,每行包含一个整数,表示pattern在text中出现的位置。 接下来1行,包括length(pattern)个整数,表示前缀数组next[i]的值,数据间以一个空格分隔,

qq_51802026的博客 2307

【字符串】- 1.kmp模式串匹配

#include<iostream> #include<string> #include<vector> using namespace std; // abcabx // 011123 void print(vector<int> A) { for (int &c : A)cout << c << " ...

嗑盐工作室 133

字符串匹配算法(1)KMP

2017/02/24 本篇针对KMP字符串匹配算法。 概述: 我们匹配字符串的时候,想到的自然是在起始点开始一个一个匹配,这样如果一直进行的话也就是相应的蛮力匹配法。但是,如果可以利用已经匹配过的这些字符串,就可以减少回退,使得可以继续使用。 总体思想: 持续利用已经学习到的信息,将其作为进一步匹配的基础。(一定要注意这个“持续”关键词) (不知道用什么软件可以做出来漂亮的图表,这样就可以直接演示...

围城 342

Java实现KMP字符串匹配算法(1)

Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。

2301_79987255的博客 336

字符串匹配的KMP算法(1)

  举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?  许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。   这种算法不太容易理解,网上有很多解释,但读起来都很费劲。直到读到Jake Boxer的文章...

Baiyi_destroyer的博客 248

算法重新出发:1.KMP字符串匹配算法

算法重新出发:1.KMP字符串匹配算法 自从前年疫情之后再没怎么刷题了,现在打算开始准备找实习找工作之类的,记录一下每天的进度。目前是在leetcode上刷题,每刷到忘记的知识点相关题会写一篇新的博客 leetcode 28. 实现 strStr() class Solution { public: int strStr(string haystack, string needle) { int len1 = haystack.length(), len2 = needle.l

Istil 199

字符串匹配1:单模式匹配(BF,RK,Sunday,BM,KMP)

字符串匹配1:单模式匹配(BF,RK,Sunday,BM,KMP)

Xu_Wave 1024

字符串模式匹配算法1 - BF和KMP算法

在字符串S中定位/查找某个子字符串P的操作,通常称为字符串的模式匹配,其中P称为模式串。模式匹配有多种算法,这里先总结一下BF算法和KMP算法。 注意:本文在讨论字符位置/指针/下标时,全部使用C语法,即下标从0开始。 BF算法 BF(Brute Force)算法也就是传说中的“笨办法”,是一个暴力/蛮力算法。设串S和P的长度分别为m,n,则它在最坏情况下的时间复杂度是O(m...

dengdi8115的博客 377

KMP算法:在字符串s中搜索匹配查找match字符串,如果能找到返回首个匹配位置i,否则返回-1

1)KMP算法的关键是match串的预设数组信息next数组,next数组啥意思呢?next[i]代表:match串的i位置前面,前缀与后缀相匹配的最大长度。next[i]还代表0--i-1范围上第一个与i位置不匹配的位置。 2)然后KMP算法的加速在于舍弃前缀匹配过那段重复对比,是复杂度加速到了o(n) 3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

weixin_46838716的博客 1059
上一篇: C语言基础
下一篇: KMP字符串匹配(2)
expp
博客等级 码龄20年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值