返回目录:

Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com


【问题描述】
KMP算法是字符串模式匹配算法中较为高效的算法之一,其在某次子串匹配母串失败时并未回溯母串的指针而是将子串的指针移动到相应的位置。

【输入形式】
3组字符串,每组字符串占一行。每行包含由空格分隔的两个字符串,字符串仅由英文小写字母组成且长度不大于100。

【输出形式】
每组数据输出1行,输出后一个字符串在前一个字符串中的位置,如果不匹配,则输出0。

【样例输入】
string str
thisisalongstring isa
nosubstring subt

【样例输出】
1
5
0

【提示】
表示字符串的数据结构可以是字符数组或用串类实现。
KMP算法调用很简单,但难的是理解算法的思想。掌握算法的思想才能说是掌握算法。


#include <iostream>
#include <string.h>
using namespace std;int * buildNext( char * P )
{   //构造模式串P的next表(改进版本)int m = strlen(P), j = 0;    //“主”串指针int * N = new int[m];   //next表int t = N[0] = -1;      //模式串指针while( j<m-1 ){if( 0>t || P[j]==P[t] ) //匹配{j++;t++;N[j] = ( P[j]!=P[t] ? t : N[t] );}else                    //失配t = N[t];}return N;
}int match( char * P, char * T )
{   //KMP算法int * next = buildNext(P);  //构造next表int n = (int)strlen(T), i = 0;  //文本串指针int m = (int)strlen(P), j = 0;  //模式串指针while( j<m && i<n ) //自左向右逐个比对字符if( 0>j || T[i]==P[j] ) //若匹配,或P已移出最左侧(两个判断的次序不可交换){ i++; j++; }elsej = next[j];    //模式串右移(注意:文本串不用回退)delete [] next;         //释放next表return i-j;
}int main()
{char * P, * T;P = new char[100];T = new char[100];int i=3;int ans;while( i-- ){cin >> T >> P;ans = match(P,T)+1;if( (ans-1)>=(int)strlen(T) ) ans = 0;cout << ans << endl;}return 0;
}


返回目录:

Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com

实现串匹配的并行算法_5-1-KMP模式匹配相关推荐

  1. 数据结构 串 KMP 模式匹配详解 通俗易懂

    KMP 模式匹配详解通俗易懂 KMP 模式匹配是解决字符串匹配的问题 一.原始的字符串暴力匹配 要点:子串的第一个字符匹配成功主串的字符后就依次匹配子串后面的字符,直到子串匹配结束 代码: publi ...

  2. 数据结构---KMP模式匹配病毒感染人的DNA检测

    数据结构-KMP模式匹配病毒感染人的DNA检测 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> #define N 1 ...

  3. 字符串匹配和KMP模式匹配(没太学懂,暂时不写)

    //字符串匹配 int stringMatching(string longstr, string smallstr){int lLen = longstr.size(), sLen = smalls ...

  4. 模式串匹配的BF算法和KMP算法

    KMP是三位大牛:D.E.Knuth.J.H.Morris和V.R.Pratt同时发现的.为了解决模式匹配问题,也即寻找模式串(子串)在主串中第一次出现的位置,若模式串在主串中不存在则返回-1. 简单 ...

  5. 经典算法——KMP模式匹配

    对于一个串中某个子串的定位操作称为串的模式匹配,其中待定的子串称为模式串.算法的基本思想:从主串的第一个位置起和模式串的第一个字符开始比较,如果想等,则继续逐一比较后续字符:否则从主串的第二个字符开始 ...

  6. 数据结构 kmp字符串匹配_用动画解释 KMP 算法

    大家好,我是一个每天在互联网都被读者催更催到爆肝,爆肾小鹿童鞋. 说实话,一些数据结构和算法我这辈子都不可能用到实际当中,但个人一直觉得能把复杂的东西讲明白是一件很牛逼的事情. 毕竟想牛逼也是很难的, ...

  7. 字符串 - KMP模式匹配

    在朴素的模式匹配算法中,主串的pos值(i)是不断地回溯来完成的(见字符串的基本操作中的Index函数).而计算机的大仙们发现这种回溯其实可以是不需要的.既然i值不回溯,也就是不可以变小,那么考虑的变 ...

  8. KMP模式匹配算法程序(Python,C++,C)

    代码来自维基教科书:Knuth-Morris-Pratt pattern matcher. Python程序如下: # Knuth-Morris-Pratt string matching # Dav ...

  9. 字符串模式匹配——最长公共子序列与子串 KMP 算法

    最长公共子序列 最长公共子序列的问题很简单,就是在两个字符串中找到最长的子序列,这里明确两个含义: 子串:表示连续的一串字符 . 子序列:表示不连续的一串字符. 所以这里要查找的是不连续的最长子序列, ...

最新文章

  1. HTTP/HTTPS抓包工具-Fiddler
  2. 千万别让这些举动断送了你的职业前程-好文共分享
  3. Linux系统管理基本操作
  4. 框架开发之Java注解的妙用
  5. TS 188字节流结构图
  6. 一张图看懂阿里云网络产品[二] 专有网络VPC
  7. 图的广度优先搜索遍历
  8. Node.js使用supervisor遭遇‘supervisor’不是内部或外部命令,如果解决?
  9. Cocos2dx之UI组件
  10. 清除数据库日志操作_SQL SERVER
  11. Intellij IDEA 使用教程(十三)IDEA内存优化
  12. wps不能打印_除了office/wps,还有一些好用的办公软件推荐给你
  13. 常用连续型随机变量的概率分布表(附概率密度函数全域积分等于1、期望、方差的推导与证明)
  14. 基于51单片机的倒计时温度检测报警器
  15. 风靡厦门的一种游戏你玩过吗?竟然发明者不是郑成功,而另有其人!
  16. 【图像生成Metrics】快速计算FID、KID、IS、PPL
  17. 诛仙很热,阅文集团的IP产业很冷
  18. spring boot 整合JSP(详解)
  19. 《毕业论文新手入坑手册》分享
  20. Nextcloud缩略图尺寸和质量的文档

热门文章

  1. 在ubuntu16.04.1配置qemu-img,qemu-nbd
  2. 认识多渲染目标(Multiple Render Targets)技术 【转】
  3. 借助树的概率dp(期望)+数学-好题-hdu-4035-Maze
  4. LTM设备上ping不通网关
  5. RHEAS 显示、输入中文
  6. 小心ASP.NET 2.0 的Skin特性伤害到您!
  7. 大一java图书馆管理系统课程设计
  8. Java Web中数据从前端输入到插入数据库,哪些地方需要考虑字符编码?
  9. NYOJ 108 士兵杀敌(一)
  10. 18_使用react脚手架构建应用