KMP算法及KMP算法的应用(POJ2406)
///KMP算法
#include<bits/stdc++.h> using namespace std; int Next[]; void makeNext(const char P[],int next[])
{
int q,k;
int len=strlen(P);
next[]=;
for(q=,k=;q<len;q++)
{
while(k>&&P[q]!=P[k])
{
k=next[k-];
}
if(P[q]==P[k])
{
k++;
}
next[q]=k;
}
} void KMP(const char P[],const char Q[],int next[])
{
int len1,len2;
int q,k;
len1=strlen(P);
len2=strlen(Q);
makeNext(Q,next);
for(q=,k=;q<len1;q++)
{
while(k>&&P[q]!=Q[k])
{
k=next[k-];
}
if(P[q]==Q[k])
{
k++;
}
if(k==len2)
{
printf("%d\n",q-len2+);
}
}
} int main()
{
char P[]=("asdfgasbnaslk");
char Q[]=("ababab"); KMP(P,Q,Next);
int n=strlen(Q);
for(int i=;i<n;i++)
{
printf("%d ",Next[i]);
}
printf("\n");
return ;
}
KMP算法的应用
///http://poj.org/problem?id=2406
///求最小循环节
///next数组的理解与应用 //#include<bits/stdc++.h>
#include<iostream>
#include<string.h>
#include<stdio.h> using namespace std; char a[];
int Next[]; void makeNext(const char P[],int next[])
{
int q,k;
int len=strlen(P);
next[]=;
for(q=,k=;q<len;q++)
{
while(k>&&P[q]!=P[k])
{
k=next[k-];
}
if(P[q]==P[k])
{
k++;
}
next[q]=k;
}
} int main()
{
while(scanf("%s",a)&&strcmp(a,".")!=)
{
int l=strlen(a);
makeNext(a,Next);
if(l%(l-Next[l-])==)
printf("%d\n",l/(l-Next[l-]));
else
printf("1\n");
}
return ;
}
KMP算法及KMP算法的应用(POJ2406)的更多相关文章
- 算法:KMP算法
算法:KMP排序 算法分析 KMP算法是一种快速的模式匹配算法.KMP是三位大师:D.E.Knuth.J.H.Morris和V.R.Pratt同时发现的,所以取首字母组成KMP. 少部分图片来自孤~影 ...
- BF算法与KMP算法
BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相等,则比较S的 ...
- 串、串的模式匹配算法(子串查找)BF算法、KMP算法
串的定长顺序存储#define MAXSTRLEN 255,//超出这个长度则超出部分被舍去,称为截断 串的模式匹配: 串的定义:0个或多个字符组成的有限序列S = 'a1a2a3…….an ' n ...
- 经典串匹配算法(KMP)解析
一.问题重述 现有字符串S1,求S1中与字符串S2完全匹配的部分,例如: S1 = "ababaababc" S2 = "ababc" 那么得到匹配的结果是5( ...
- 数据结构之BF算法,kmp算法,三元组,十字链表总结
在这一章中,老师教了我们四种数据结构:BF算法,kmp算法,三元组和十字链表:还给我们讲了2019年团体天体赛中T1-8的AI题 1.对于BF和kmp算法,老师除了在课堂上讲解算法的主要核心思想外,还 ...
- 算法 | 串匹配算法之KMP算法及其优化
主串 s:A B D A B C A B C 子串 t: A B C A B 问题:在主串 s 中是否存在一段 t 的子串呢? 形如上述问题,就是串匹配类问题.[串匹配--百度百科] 串匹配问题是一 ...
- 文本比较算法三——SUNDAY 算法
SUNDAY 算法描述: 字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).两个算法在最坏情况下均具有线性的查找时间.但是在实用上 ...
- KMP和扩展KMP【转】
这种东西基本上在纸上自己推导一下就能做出来XD 转发注明出处 KMP 给出两个字符串A(称为模板串)和B(称为子串),长度分别为lenA和lenB,要求在线性时间内,对于每个A[i] (0<=i ...
- KMP与扩展KMP
原文转自:http://www.cppblog.com/MatoNo1/archive/2011/04/17/144390.aspx KMP:给出两个字符串A(称为模板串)和B(称为子串),长度分别为 ...
- Manacher模板,kmp,扩展kmp,最小表示法模板
*N]; //储存临时串 *N];//中间记录 int Manacher(char tmp[]) { int len=strlen(tmp); ; ;i<len;i++) { s[cnt++]= ...
随机推荐
- Oracle查看表空间使用情况
查看表空间使用情况 select upper(f.tablespace_name) "表空间名", d.tot_grootte_mb "表空间大小(m ...
- PHP - 目录与文件
第6章 目录与文件 学习要点: 1.目录操作 2.磁盘.目录和文件计算 3.文件处理 将相关的数据组织为文件和目录等实体,这一直是计算环境的核心概念.出于这个原因,程序员需要有一种方法来获得关于文件和 ...
- Eclipse用法和技巧十八:减少不必要的输入
写代码的时候,很多人都有一个原则,尽量上输入.依靠IDE自动生成的代码,一般可读性,排版什么的都还是不错的,最主要的一般不会有什么低级错误.今天介绍几个在eclipse环境中,常用的依靠eclipse ...
- 『WPF』DataGrid的使用
原文 『WPF』DataGrid的使用 几点说明 这里主要是参考了MSDN中关于DataGrid的说明 这里只会简单说明在WPF中,DataGird最简单的使用方法 对于MSDN中的翻译不会很详细,也 ...
- 如何在myeclipse有个项目文件很多,我想找一段代码,怎么查找?
然后输入要找的文字 然后在File name pathherns 中写 *.java 如果有多个就可以用逗号分隔! 然后 search
- 基于visual Studio2013解决面试题之1003字符串逆序
题目
- MongoDB系列之三(副本集配置)
今天我测试了一下MongoDB的副本集的配置. 首先从概念上说一下MongoDB副本集和主从复制的区别.其实副本集(Replica Set)是主从复制的高级形式.高级在哪里呢?主动复制实现了数据备份+ ...
- Round Numbers
转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1301472836 大致题意: 输入两个十进制正整数a和b,求闭区间 [a ,b] 内有多少 ...
- 基于MFC简单图片裁剪工具
话说这几天又没干啥正事,看书没效率,游戏也没怎么玩,尼玛时间都去哪儿了! --------------------------------------------------------------- ...
- 【JAVA学习】单例模式的七种写法
尊重版权:http://cantellow.iteye.com/blog/838473 第一种(懒汉.线程不安全): Java代码 public class Singleton { private ...