博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KMP
阅读量:4341 次
发布时间:2019-06-07

本文共 1066 字,大约阅读时间需要 3 分钟。

模板

1 int Next[MAXN]; 2 char s1[MAXN],s2[MAXN]; 3  4 void getNext(char *s){ 5     int l = strlen(s); 6     Next[0] = -1;//很关键,漏了会死循环. 7     int k=-1,j=0; 8     while(j

 

int Next[MAXN];
char s1[MAXN],s2[MAXN];
 
voidgetNext(char*s){
    int l =strlen(s);
    Next[0]=-1;//很关键,漏了会死循环.
    int k=-1,j=0;
    while(j
        if(k==-1|| s[k]== s[j]){
            j++;
            k++;
            //Next[j] = k;//这句是未优化时写的代码
            if(s[j]!= s[k])//如果是k=-1的话,直接赋值为-1,这样优化可以降低一些复杂度
                Next[j]= k;
            else
                Next[j]= Next[k];
        }
        else{
            k=Next[k];
        }
    }
}
 
intkmp(char*s1,char*s2){
    getNext(s2);//注意,求next数组是求匹配串的
    int l1=strlen(s1);
    int l2=strlen(s2);
    int i=0;
    int j=0;
    while(i
        if(j==-1||s1[i]== s2[j]){
//找到匹配各自加1
            i++;
            j++;
        }
        else{
//kmp的精髓,自己好好体悟
            j=Next[j];
        }
    }
    if(j==l2){
        return i-j;//找到匹配串,返回第一个匹配的位置
    }
    elsereturn-1;
}

转载于:https://www.cnblogs.com/yZiii/p/7284652.html

你可能感兴趣的文章
eclipse下进行c开发,使用zeromq
查看>>
翰思博客
查看>>
阿里云CentOS7搭建SVN服务器
查看>>
(转)每天一个linux命令(15):tail 命令
查看>>
拿不起怎么会放得下呢
查看>>
Python3爬虫(八) 数据存储之TXT、JSON、CSV
查看>>
源码安装caffe2时遇到的问题解决办法
查看>>
Window 相关命令
查看>>
Redis学习-hash数据类型
查看>>
系统进程 zygote(三)—— app_process 的 main 函数
查看>>
【我的学习笔记】汇总
查看>>
漫谈可视化Prefuse(六)
查看>>
转:如何提高测试用例设计的测试覆盖率
查看>>
MFC常用类
查看>>
java中寻找字符串中重复的字符(转)
查看>>
Dart编程语言入门
查看>>
TaskbarCreated 消息
查看>>
JAVA大作业汇总2
查看>>
IIR滤波器设计(调用MATLAB IIR函数来实现)(转)
查看>>
分数CSD编码
查看>>