///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)的更多相关文章

  1. 算法:KMP算法

    算法:KMP排序 算法分析 KMP算法是一种快速的模式匹配算法.KMP是三位大师:D.E.Knuth.J.H.Morris和V.R.Pratt同时发现的,所以取首字母组成KMP. 少部分图片来自孤~影 ...

  2. BF算法与KMP算法

    BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相等,则比较S的 ...

  3. 串、串的模式匹配算法(子串查找)BF算法、KMP算法

    串的定长顺序存储#define MAXSTRLEN 255,//超出这个长度则超出部分被舍去,称为截断 串的模式匹配: 串的定义:0个或多个字符组成的有限序列S = 'a1a2a3…….an ' n ...

  4. 经典串匹配算法(KMP)解析

    一.问题重述 现有字符串S1,求S1中与字符串S2完全匹配的部分,例如: S1 = "ababaababc" S2 = "ababc" 那么得到匹配的结果是5( ...

  5. 数据结构之BF算法,kmp算法,三元组,十字链表总结

    在这一章中,老师教了我们四种数据结构:BF算法,kmp算法,三元组和十字链表:还给我们讲了2019年团体天体赛中T1-8的AI题 1.对于BF和kmp算法,老师除了在课堂上讲解算法的主要核心思想外,还 ...

  6. 算法 | 串匹配算法之KMP算法及其优化

    主串 s:A B D A B C A B C 子串 t:  A B C A B 问题:在主串 s 中是否存在一段 t 的子串呢? 形如上述问题,就是串匹配类问题.[串匹配--百度百科] 串匹配问题是一 ...

  7. 文本比较算法三——SUNDAY 算法

    SUNDAY 算法描述: 字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).两个算法在最坏情况下均具有线性的查找时间.但是在实用上 ...

  8. KMP和扩展KMP【转】

    这种东西基本上在纸上自己推导一下就能做出来XD 转发注明出处 KMP 给出两个字符串A(称为模板串)和B(称为子串),长度分别为lenA和lenB,要求在线性时间内,对于每个A[i] (0<=i ...

  9. KMP与扩展KMP

    原文转自:http://www.cppblog.com/MatoNo1/archive/2011/04/17/144390.aspx KMP:给出两个字符串A(称为模板串)和B(称为子串),长度分别为 ...

  10. Manacher模板,kmp,扩展kmp,最小表示法模板

    *N]; //储存临时串 *N];//中间记录 int Manacher(char tmp[]) { int len=strlen(tmp); ; ;i<len;i++) { s[cnt++]= ...

随机推荐

  1. cocos2d-x on wp8架构简单介绍

    1,基于C++的开发架构 支持3大移动平台以及3大桌面平台. 分为图形,声音,物理3大模块,另外还有脚本的导出. 在wp8/win32上的图形是基于d3d的,而在其它平台是基于opengl/openg ...

  2. 用C语言怎么实现复制自己

    #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char str[80]; ...

  3. poj2533--Longest Ordered Subsequence(dp:最长上升子序列)

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 33943   Acc ...

  4. python gzip 压缩文件

    压缩数据创建gzip文件 先看一个略麻烦的做法 ? 1 2 3 4 5 6 import StringIO,gzip content = 'Life is short.I use python' zb ...

  5. 团队 / Staff_VidaMiaTangoClub_新浪博客

    团队 / Staff_VidaMiaTangoClub_新浪博客 团队 / Staff

  6. 远程调用内核接口(remote call kernel)

    -------------------------------------------------------------------------------- 标题: 远程调用内核接口(remote ...

  7. 2014/08/24——升级stepbystep修复tc不刷新问题并加入杭电bc

    问题: 自从tc站点升级以后做题统计的tc一栏就不刷新了,为此全哥也更新了一下stepbystep的配置文件什么的,我仅仅要将其挂到server上即可了. 由于加了杭电的bc,看来这事儿不easy.还 ...

  8. 一个Sqrt谋杀触发功能

    我们平时常常会有一些数据运算的操作,须要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是怎样实现的?就拿最常常使用的sqrt函数来说吧.系统怎么来实现这个常常调用的函数呢? ...

  9. QCompleter自动补全

     知识永远是那么多,想到什么就总结什么,今天记录一下关于我对QComplete的一些小见解.   官方文档中叙述如下:     可以在任何Qt的窗口小部件中使用QCompleter提供自动补全功能,如 ...

  10. 基于visual Studio2013解决面试题之0506取和为m的可能组合

     题目