美文网首页
KMP算法及其实现

KMP算法及其实现

作者: MambaHJ | 来源:发表于2018-05-20 15:15 被阅读37次
#include <stdio.h>
#include <stdlib.h>
#define MAX 10000

typedef struct string{
    char ch[MAX];
    int len;
}string;

int size(string *s);
int KMP(string *l1,string *l2,int next[]);
void getNext(string *l,int next[]);

int main(int argc, const char * argv[]) {
    string *l1 = (string *)malloc(sizeof(string));
    string *l2 = (string *)malloc(sizeof(string));
    printf("输入待匹配的字符串:");
    scanf("%s",l1->ch);size(l1);
    printf("输入模式字符串:");
    scanf("%s",l2->ch);size(l2);
    int next[MAX];
    getNext(l2, next);
    if (KMP(l1, l2, next)) {
        printf("匹配成功\n");
    }else
        printf("匹配失败\n");
    return 0;
}

int size(string *s){
    int i=0;
    while (s->ch[i] != '\0') {
        i++;
    }
    s->len = i;
    return s->len;
}

int KMP(string *l1,string *l2,int next[]){
    int i=0,j=0;
    while (i<l1->len && j<l2->len) {
        if (j == -1 || l1->ch[i] == l2->ch[j]) {
            i++;
            j++;
        }else{
            j = next[j];
        }
    }
    if (j==l2->len) {
        return 1;
    }else
        return 0;
}

void getNext(string *l,int next[]){
    int i=0,k=-1;   //k表示前缀,i表示后缀
    next[0]=-1;
    while (i<l->len-1) {
        if (k == -1 || l->ch[k] == l->ch[i]) {
            ++k;
            ++i;
            if (l->ch[k] != l->ch[i]) {
                next[i] = k;
            }else{
                next[i] = next[k];
            }
        }else{
            k = next[k];
        }
    }
}

相关文章

  • 日常笔记

    字符串匹配的KMP算法和朴素算法,及其python实现 http://blog.csdn.net/chinwufo...

  • KMP算法及其实现

    首先推荐一个博客,讲的十分细致易懂从头到尾彻底理解KMP 代码实现

  • 字符串匹配与KMP算法

    1.朴素字符串匹配算法 2.KMP算法 求前缀函数 实现KMP算法 3.测试代码

  • 算法(2)KMP算法

    1.0 问题描述 实现KMP算法查找字符串。 2.0 问题分析 “KMP算法”是对字符串查找“简单算法”的优化。 ...

  • KMP算法 理解与实现

    KMP算法,背景不必多说,主要想写一写自己对KMP算法的一些理解和其具体实现。关于KMP算法的原理,阮一峰老师的这...

  • KMP算法

    参考文献1.B站灯笼哥2.KMP算法python实现3.如何更好的理解和掌握 KMP 算法?

  • KMP 专题整理

    KMP 学习记录 kuangbin专题十六——KMP KMP 学习总结 朴素 KMP 算法 拓展 KMP 算法(E...

  • (303)查找-基于DFA的KMP字符串匹配

    概述 基于DFA的KMP算法。是根据DFA状态转换表来实现。下面是java实现的代码 理论 关于kmp理论部分 《...

  • 对KMP算法的一些理解

    最近学到KMP算法,下面讲讲对KMP算法的一些个人理解,希望对大家有帮助! 对于KMP算法的理解: 整个KMP算法...

  • Swift 实现KMP算法

    使用swift语言实现了一下KMP算法,具体代码如下 详细的描述了KMP算法推导next数组的流程 改进后的nex...

网友评论

      本文标题:KMP算法及其实现

      本文链接:https://www.haomeiwen.com/subject/dgktjftx.html