KMP算法程序

来源:互联网 发布:淘宝的服务中心在哪里 编辑:程序博客网 时间:2024/06/06 19:54

上上周学习了kmp,经过练习现在终于能够自己独立写出来了,看的网页里面这个感觉还是蛮不错的,别的网址说真的对我来说还是有些难理解
这些是我最近看的网页
http://www.matrix67.com/blog/archives/115
http://blog.csdn.net/v_july_v/article/details/7041827
我水平有限,还是matrix67讲的比较详细接地气,对我帮助很大。

我这个程序就是按照matrix67的思路编写的,只不过字符串的首元素下标为0,而不是matrix67网页中给出程序的首元素为下标为1。

#include <cstdio>#include <cstring> #include <iostream>//挺对的,但是还不明白 using namespace std;string a, b, p;int main(){  cin>>a>>b;  int j = -1;  p[0] = -1;  for(int i = 1; i < b.size(); i++)  {    while(j >= 0 && b[j+1] != a[i]) j = p[j];    if(b[j+1] == b[i]) j++;    p[i] = j;  }  j = -1;  for(int i = 0; i < a.size(); i++)  {    while(j >= 0 && b[j+1] != a[i]) j = p[j];    if(b[j+1] == a[i]) j++;    if(j == b.size()-1)     {      j = p[j];      printf("%d\n", i-b.size()+1);    }  }  getchar();getchar();  return 0;} 
0 0
原创粉丝点击