KMP未优化模板、
2024-08-25 06:23:54
要理解KMP最重要的一点就是防止重复的回溯、
!!!很重要!!!很重要!!!很重要
要了解KMP可以去:http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html
首先要生成模板串的next数组
void getNext(char *p,int *next)
{
int j,k;
next[]=-;
j=;
k=-;
while(j<strlen(p)-)
{
if(k==-||p[j]==p[k]) //匹配的情况下,p[j]==p[k]
{
j++;
k++;
next[j]=k;
}
else //p[j]!=p[k]
k=next[k];
}
}
然后来匹配、
int KMPMatch(char *s,char *p)
{
int next[];
int i,j;
i=;
j=;
getNext(p,next);
while(i<strlen(s))
{
if(j==-||s[i]==p[j])
{
i++;
j++;
}
else
{
j=next[j]; //消除了指针i的回溯
}
if(j==strlen(p))
return i-strlen(p);
}
return -;
}
最新文章
- MMORPG大型游戏设计与开发(服务器 AI 事件)
- linux 内核cache
- C# .Net实现URL绝对路径和相对路径之间互相转换
- SCU 4440 分类: ACM 2015-06-20 23:58 16人阅读 评论(0) 收藏
- 未能加载文件或程序集“Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342";
- iOS UIButton加在window上点击无效果问题
- JMS - QueueBrowser
- 鸟哥的Linux私房菜 第十八章、认识系统服务 (daemons)
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- IOS-tableViewCell重用机制
- python——BS解析器
- 【转】VC中TRACE
- js对表单设置了readonly和disabled后的区别
- bash: scrapy: command not found
- 关于如何登陆oracle 18c pdb 的问题
- 软工网络15团队作业4——Alpha阶段敏捷冲刺
- 关于 vue 日期格式的过滤
- Gradle 从svn 中检出的父项目后处理配置【我】
- linux系统监控与硬盘分区/格式化/文件系统管理
- bootstrap css布局