1. /**
  2. * name:KMP
  3. * time:2012-11-22
  4. * 字符串快速匹配
  5. */
  6. #include<stdio.h>
  7. #include<string.h>
  8. typedef struct seqstring{
  9. char string[100];
  10. int length;
  11. }seqstring;
  12.  
  13. void getnext(seqstring p,int next[]){
  14. int i,j;
  15. next[0]=-1;//next[0]放上-1
  16. i=0;//指向字符串每个字符的指针
  17. j=-1;
  18. while(i<p.length){//没有到达结尾的话
  19. if(j==-1||p.string[i]==p.string[j]){//如果是第一个字符或遇到相同的字符
  20. i++;j++;next[i]=j;
  21. }
  22. else
  23. j=next[j];
  24. }
  25. for(i=0;i<p.length;i++){//输出next[]值
  26. printf("%d ",next[i]);
  27. }
  28. }
  29.  
  30. int kmp(seqstring t,seqstring p,int next[]){
  31. int i,j;
  32. i=j=0;
  33. while(i<t.length&&j<p.length){
  34. if(j==-1||t.string[i]==p.string[j]){
  35. i++;j++;
  36. }
  37. else
  38. j=next[j];
  39. }
  40. if(j==p.length) return i-p.length;
  41. else return -1;
  42. }
  43. int main(){
  44. seqstring t,p;
  45. int next[50];
  46. printf("please input string t:");
  47. scanf("%s",t.string);
  48. t.length=strlen(t.string);
  49. printf("please input string p:");
  50. scanf("%s",p.string);
  51. p.length=strlen(p.string);
  52.  
  53. getnext(p,next);
  54. printf("\n%d\n",kmp(t,p,next));
  55. }

  

Kmp 算法模板 C的更多相关文章

  1. hdu 1711 KMP算法模板题

    题意:给你两个串,问你第二个串是从第一个串的什么位置開始全然匹配的? kmp裸题,复杂度O(n+m). 当一个字符串以0为起始下标时.next[i]能够描写叙述为"不为自身的最大首尾反复子串 ...

  2. KMP算法模板&&扩展

    很不错的学习链接:https://blog.csdn.net/v_july_v/article/details/7041827 具体思路就看上面的链接就行了,这里只放几个常用的模板 问题描述: 给出字 ...

  3. kmp算法模板及理解

    kmp算法是复杂度为O(n+m)的字符串匹配算法; 首先kmp算法的核心是在模式串中获得next数组,这个数组表示模式串的子串的前缀和后缀相同的最长长度; 这样在匹配的过程中如果指到不匹配的位置,模式 ...

  4. 【Luogu P3375】字符串匹配KMP算法模板

    Luogu P3375 模式串:即题目中的S2所代表的意义 文本串:即题目中的S1所代表的意义 对于字符串匹配,有一种很显然的朴素算法:在S1中枚举起点一位一位匹配,失配之后起点往后移动一位,从头开始 ...

  5. POJ 3461 Oulipo KMP算法(模板)

    题意: 给两组字符串a和b,求a在b中出现的次数 关于KMP: 马拉车算法是处理回文串,而KMP是处理前后缀的相同字符串的最长长度. a | a | b | a | a | f | a | a 数组 ...

  6. KMP算法模板

    不懂的话推荐看这篇博客,讲的很清楚 http://blog.csdn.net/v_july_v/article/details/7041827 #include<iostream> #in ...

  7. KMP算法———模板

    做出KMP字符串匹配算法心情也是好好哒,萌萌哒. 感谢黄学长,感谢栋栋! #include<cstdio>#include<string>#include<iostrea ...

  8. kmp算法 模板

    #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ...

  9. KMP算法模板(pascal)

    洛谷P3375: program rrr(input,output); var i,j,lena,lenb:longint; a,b:ansistring; next:..]of longint; b ...

随机推荐

  1. POJ 1836 Alignment

    Alignment Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 11450 Accepted: 3647 Descriptio ...

  2. xocde真机测试 内存查看

    如上, 有的时候真机调试, 内存和cpu占用没有被展示出来, 那么真机测试的时候怎么查看我们当前使用的内存呢, 有办法: instrument->activity monitory 点击左上角的 ...

  3. Tooltip jqueryui

    (文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) http://jqueryui.com/tooltip/ <meta charset=&quo ...

  4. virgo虚拟桌面

    转载: http://www.appinn.com/virgo-virtual-desktop-for-windows/ virgo 是一款 Windows 下的极简虚拟桌面,源程序自身只有 7KB, ...

  5. Linux netstat详解

    做计算机管理员,我们都必要了解一下netstat这个命令,它是一个查看网络连接状态的工具,在windows下也默认有这个工具.Netstat命令详解 netstat命令怎样使用 如何关闭TIME_WA ...

  6. 基础知识《四》---Java多线程学习总结

    本文转载自51cto 一.线程的基本概念简单的说:线程就是一个程序里不同的执行路径,在同一个时间点上cpu只会有一个线程在执行,Java里的多线程是通过java.lang.Thread类来实现的,每个 ...

  7. js 函数声明方式以及javascript的历史

    1.function  xx(){} 2.匿名方式   window.onload=function(){dslfjdslfkjdslf}; 3.动态方式  var demo=new Function ...

  8. 【转】利用optimize、存储过程和系统表对mysql数据库表进行批量碎片清理释放表空间

    本文收集于本人的笔记本,由于找不到原文出处.在此省略,如哪位知道可以联系我加上. 核心是利用mysql系统表和“optimize table 表名”命令,对mysql数据表进行空间的释放.由于dele ...

  9. Android 和iOS中 View的滚动

    在最近的程序中用到了Android中的View的滚动,记录一下,待总结.

  10. maven的一些依赖

    maven的一些依赖: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://w ...