zoukankan      html  css  js  c++  java
  • KMP算法模板

    sub[ ]代表子串,str[ ]代表原串,next[ ]代表当sub[i] != str[j]时,子串需要跳到的地方,实现代码如下:

    获取next数组的代码:

     1 void GetNext()//求子串中的相同的真前缀和真后缀
     2 {
     3     memset(next, 0, sizeof(next));
     4     next[0] = -1;
     5     int i = 0,j = -1;
     6     int sub_len = strlen(sub);
     7     while(i < sub_len)
     8     {
     9         if(j == -1 || sub[i] == sub[j])
    10         {
    11             i++;
    12             j++;
    13             next[i] = j;
    14         }
    15         else
    16             j = next[j];
    17     }
    18 }

    KMP实现的代码:

     1 int KMP()
     2 {
     3     int res = 0;
     4     int sub_len = strlen(sub);
     5     int str_len = strlen(str);
     6     int i = 0;
     7     int j = 0;
     8     while(i < str_len && j < sub_len)
     9     {
    10         if(j == -1 || str[i] == sub[j])
    11         {
    12             i++;
    13             j++;
    14         }
    15         else
    16             j = next[j];
    17         if(j == sub_len)     //此处实现的是统计子串在原串中出现的次数
    18         {                    //这里可以根据具体情况来调整
    19             res++;
    20             j = next[j];
    21         }
    22     }
    23     return res;
    24 }

    练习题:Oulipo-Poj

  • 相关阅读:
    spark 中划分stage的思路
    如何带人
    技术管理
    学会谈判
    绩效评估与绩效反馈
    企业文化如何落地
    绩效沟通的best原则
    Area POJ
    Cows POJ
    Grandpa's Estate POJ
  • 原文地址:https://www.cnblogs.com/sykline/p/9737835.html
Copyright © 2011-2022 走看看