自己理解的KMP
来源:互联网 发布:网络种地实例 编辑:程序博客网 时间:2024/06/08 10:10
看来KMP的next的数组(实际上只是把求解next数组代码记下来了)然后根据:移动的位数=已匹配的字符数-next数组对应的值(对应不匹配的前一个我认为)
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;char str[100],text[100];int next[100];void getnext(int len) //next数组的求解{ int i=0,j=-1;next[0]=-1;while(i<len){if(j==-1 ||str[i]==str[j]){i++;j++; next[i]=j;}elsej=next[j];}}int main(){int len,i,j,lentext,k,count,pcount=0;cin>>str;cin>>text;//文本字符串 len=strlen(str); lentext=strlen(text); getnext(len); for(i=0;i<lentext;i++) { k=i; //感觉这个赋值很好 count=0; for(j=0;j<len;j++) { if(text[k]==str[j]) { count++; k++; } else { i+=count-next[j]-1; //i需要移几位少一位,因为还要i++ break; } } if(count==len) { pcount++; } } cout<<"个数有几个:"<<pcount<<endl;return 0;}<img src="http://img.blog.csdn.net/20151010202017788?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="http://img.blog.csdn.net/20151010202036353?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
0 0
- 自己理解的KMP
- KMP 算法 自己的一些理解
- 自己关于KMP算法的理解
- hdu2087-自己的理解&kmp讲解-剪花布条
- 自己的KMP模板
- KMP算法的理解
- KMP的理解
- KMP算法的理解
- kmp的简单理解
- 【算法】KMP的理解
- KMP的理解
- KMP算法的理解
- KMP算法的理解
- 关于KMP的理解
- KMP算法的理解
- KMP的理解
- 关于KMP的理解
- KMP算法的理解
- java 获取进程ID 物理内存 cpu使用百分比(linux环境)
- Linux-CentOS7 KDE 中文语言支持
- 10 个非常重要的 HotSpot JVM 参数
- C++Primer阅读留存问题
- java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor
- 自己理解的KMP
- HDU 4409 - Family Name List(模拟树+lca)
- jsp JSTL
- python twisted 浅析
- Android基础
- iOS开发UI篇-Quartz2D使用(绘图路径)
- Linux进程间通信方式--信号,管道,消息队列,信号量,共享内存
- Viewpager的setOnPageChangeListener方法详解
- 记录文件,要做的事情