美文网首页程序员
串的模式匹配

串的模式匹配

作者: 柳亮亮 | 来源:发表于2018-05-23 20:35 被阅读0次

串的模式匹配(KMP)

设s和t是给定的两个串,在主串s中找到等于子串t的过程称为模式匹配。

如果在s中找到等于t的子串,则称匹配成功,函数返回t在s中的首次出行的存储位置,否则匹配失败,返回-1。

t也称模式串,s称为目标串,为了方便,设字符的长度存放在0号单元,串值从1号单元往后存放,这样字符序号与存储的位置一致。

简单算法

首先将s1与t1进行比较,若不同,就将s2与t1进行比较...直到s的某一个字符si和t1相同,再将他们之后的字符进行比较,若也相同,则如此继续往下比较,当s的某一个字符si与t的字符tj不同时,则s返回到本趟开始字符的下一个字符,即si-j+2,t返回到t1,继续开始下一趟的比较,重复上述过程。若t中的字符全部比完,则说明本趟匹配成功,本趟的起始位置是i-j+1或i-t[0],否则,匹配失败。

完整代码

int Index(SString S,SString T){

int i=1,j=1;

while(i<=S[0]&&j<=T[0]){//第0个位置存放的是长度

if(S[i]==T[j])1{

i++;

j++;

}else{

i=i-j+2;

j=1;

}

}

if(j>T[0])

return i-T[0];//return i-j+1也是完全ojbk的

else

return 0;

}

最好情况下时间复杂度是O(n+m)

最坏情况下时间复杂度是O(n*m)

KMP算法

int Index(SString S,SString T){

int i=1,j=1;

while(i<=S[0]&&j<=T[0]){//第0个位置存放的是长度

if(j==0||S[i]==T[j])1{

i++;

j++;

}else{

J=next[j];

}

}

if(j>T[0])

return i-T[0];//return i-j+1也是完全ojbk的

else

return 0;

}

Void get_next(char T[],int next[]){

I=1;

Next[1]=0;

J=0;

While(i<=T[0]){

If(j=0||T[i]==T[j]){

i++;

J++;

Next[i]=j;

}else

J=next[j];

}

}

相关文章

  • 多模式串匹配 - AC 自动机

    多模式串匹配概念 多模式串匹配,即多个模式串在一个主串中进行匹配。 虽然单模式串也能完成多模式串的匹配,但每个模式...

  • 模式匹配中Brute-Force与KMP算法关键提取

    模式匹配是串结构的一种操作方法,用于串的匹配。待匹配串称为主串(也叫目标串),执行串称为子串(也叫模式串)。模式匹...

  • 字符串模式匹配KMP

    主串S: [0...n-1]模式串T: [0...m-1]模式匹配:返回模式串在主串中的位置 蛮力法 简单模式匹配...

  • 模式匹配

    模式匹配之字符串 模式匹配之匹配类型 模式匹配之匹配数组、元组、集合 模式匹配之样例类 模式匹配之偏函数

  • BF算法 KMP算法(普通、快速模式匹配算法)及C语言

    判断两个串之间是否存在主串与子串的关系,这个过程称为串的模式匹配。 在串的模式匹配过程,子串 T 通常被叫做“模式...

  • 数据结构学习第三弹 串(2) 匹配模式

    串的模式匹配 串的模式匹配也可以说子串的定位,是一种重要的串运算。所谓模式匹配就是给定两个串s1和s2,在主串s1...

  • 数据结构与算法学习 (08)字符串匹配--BF算法/RK算法

    BF算法也就是串的模式匹配算法,在主串中查找与模式T(副串)相匹配的子串,如果匹配成功,找到该子串在主串出现的第一...

  • AC自动机

    字符串匹配算法 单模式串匹配算法 是在一个模式串和一个主串之间进行匹配,也就是说,在一个主串中查找一个模式串。 多...

  • 数据结构与算法串的模式匹配

    1.简单的模式匹配算法子串的定位通常称为串的模式匹配,它求的是子串的(常称模式串)在主串中的位置 实现思想:将主串...

  • Python算法-字符串(String)

    字符串匹配问题字符串匹配(String Matching):又称为模式匹配(Pattern Matching)。可...

网友评论

    本文标题:串的模式匹配

    本文链接:https://www.haomeiwen.com/subject/wcedjftx.html