KMP算法解析
2024-10-18 23:34:43
介绍一种高效的KMP算法:代码可以直接运行
#include <iostream>
#include <iomanip>
using namespace std; void preKmp(char* s,int len,int* next)
{
int i=,j=-;
next[]=-; while(i<len)
{
while(j>- && s[i]!=s[j])
j=next[j];
i++;
j++; if(s[i]==s[j])
next[i]=next[j];
else
next[i]=j;
}
} int KMP(char*s,char* p)
{
int sn=strlen(s);
int sp=strlen(p); int* next=new int[sp];
preKmp(p,sp,next); int i=,j=;
while(i<sn)
{
while(j>- && s[i]!=p[j])
j=next[j];
i++;
j++; if(j>=sp)
{
return i-j;
}
}
return -;
} int main(int argc, char* argv[])
{
char* p="abcdabceabcde";
char* s="abcdabcdabceabcde";
int pos=KMP(s,p);
cout<<pos<<endl;
return ;
}
最新文章
- 第五次团队作业——第一次项目冲刺——Alpha版本
- PHP之session与cookie
- Servlet读取Excel标准化数据库过程记录
- qt QMetaObject::connectSlotsByName()自动关联失效问题解决
- vue.js(二)
- Ubuntu打开终端和设置root密码(转载)
- ubuntu12.10可用更新源
- C语言数据输入与输出
- Selenium2学习之-环境搭建
- Asp.Net Memcached安装配置使用、安全性
- 运行于64操作系统上的C#客户端通过WCF访问Oracle数据库不兼容问题
- 【引用】Linux 内核驱动--多点触摸接口
- 11g r2 模拟OCR和voting disk不可用,完整恢复过程,以及一些注意事项
- JavaScript模拟自由落体
- 深入浅出 JVM GC(1)
- java1.8 新特性(五 如何使用filter,limit ,skip ,distinct map flatmap ,collect 操作 java集合)
- iOS 给UIView添加xib
- 获取sevlet response值
- bootstrap世界探索2——万物的起源(网格系统)
- poj2253 Frogger(Floyd)