zoukankan      html  css  js  c++  java
  • poj3461 KMP 小结

     这两天简单研究了KMP ,网上有很多讲解的文章,我在这里就不班门弄斧啦。大家要是学的话,可以看看这个人写的http://www.matrix67.com/blog/archives/115 。KMP要是只看讲解,估计会很困难,大家可以结合具体例子去调试分析学习,比较快把。NEXT 有很多不同的版本,我喜欢传统的版本,下面就用POJ这个题做个模板把。
    3561这个题目说的长。一看例子就知道,和那个剪画布的一模一样。就是从第二个里面找第一个串的数量。当然这里主串交长,简单的BF是行不通的。下面代码

     1 #include<stdio.h>
     2 #include<string.h>
     3 char a[10001],s[1000101];
     4 int next[10001],len1,len2;
     5 void NEXT()
     6 {
     7 
     8     int j,k;
     9     next[0]=-1;
    10     j=0;
    11     k=-1;
    12     while(j<len1)
    13     {
    14         if(k==-1||a[k]==a[j])
    15         {
    16             k++;
    17             j++;
    18             next[j]=k;
    19         }
    20         else
    21             k=next[k];
    22     }
    23 }
    24 int KMP()
    25 {
    26     int j=0,i=0,sum=0;
    27     NEXT();
    28     while(i<len2)
    29     {
    30         if(j==-1||a[j]==s[i])
    31         {
    32             i++;
    33             j++;
    34         }
    35         else
    36             j=next[j];
    37         if(j==len1)////模串到头说明匹配成功
    38             sum++;
    39     }
    40     return sum;
    41 }
    42 int main()
    43 {
    44     int sum,T;
    45     scanf("%d",&T);
    46     while(T--)
    47     {
    48         scanf("%s%s",a,s);
    49         len1=strlen(a);
    50         len2=strlen(s);
    51         sum=0;
    52         sum=KMP();
    53         printf("%d\n",sum);
    54     }
    55     return 0;
    56 }

    第一次在博客园上写,有点生疏,以前一直在新浪上,但是代码太乱,也不想换窝,今天痛下决心换啦!

  • 相关阅读:
    Chp18: Hard
    内存泄漏 和 内存溢出
    Chp4: Trees and Graphs
    trie树--详解
    Tries
    Comparable & Comparator
    memory leak
    8个月从CS菜鸟到拿到Google Offer的经历+内推
    Word Ladder II
    Java垃圾回收机制
  • 原文地址:https://www.cnblogs.com/zibuyu/p/2632078.html
Copyright © 2011-2022 走看看