• KMP算法


    具体的参照该网址:

    https://www.cnblogs.com/zhangtianq/p/5839909.html

    实现如下:不过解释 或者说怎么实现的在上面网址

     1 #include<cstdio>
     2 #include<cstring>
     3 #define N 10
     4 
     5 int next[N] = {0};
     6 
     7 void getNext(char P[]);
     8 
     9 int main(void) {
    10     char T[] = "abcbabcd";
    11     char P[] = "abc";
    12     int i = 0, j = 0;//i为主串的指针位置,j为模式串指针位置
    13     int len_P = strlen(P);
    14     int len_T = strlen(T);
    15 
    16     getNext(P);
    17     while (i < len_T && j < len_P) {
    18         if (j == -1 || T[i] == P[j]) { i++; j++; }
    19         else j = next[j];
    20     }
    21 
    22     if (j == len_P) printf("%d", i - j);
    23     else printf("-1");
    24 }
    25 
    26 void getNext(char P[]) {
    27     next[0] = -1;
    28     
    29     int j = 0, k = -1;
    30     int len = strlen(P);
    //p[k]是前缀,p[j]是后缀
    31 /* 32 while (j < len - 1) { 33 if (k == -1 || P[j] == P[k]) next[++j] = ++k; 34 else k = next[k]; 35 }//其实这个循环还是可以优化 如下: 36 */ 37 while (j < len - 1) { 38 if (k == -1 || P[j] == P[k]) { 39 if (P[++j] == P[++k]) next[j] = next[k]; 40 else next[j] = k; 41 } 42 else k = next[k]; 43 } 44 45 }
  • 相关阅读:
    Silverlight Control(五)TimePicker
    《ASP.NET Core 3框架揭秘》笔记
    Hyper-V初体验
    debian初体验
    异步编程-编程指南
    Oracle查询优化读书笔记
    设计原则
    日志管理
    Git在Vs中的使用
    SVN使用备注
  • 原文地址:https://www.cnblogs.com/letianpaiai/p/13805710.html
Copyright © 2020-2023  润新知