KMP

来源:互联网 发布:微信小游戏源码下载 编辑:程序博客网 时间:2024/06/05 23:47
KMP算法用于字符串匹配等问题,171031最近好久都没有写博客了,大神们去西安比赛都要回来了,我也要研究算法开始学习了,加油!
#include <stdio.h>#include <string.h>int next[32] = {-5};void get_next(char *T,int *next){int k = -1;int j = 0;next[j] = k;while(j<strlen(T)){if((k==-1)||(T[j]==T[k]))//判断匹配成功的条件 {k++;j++;next[j] = k;//匹配成功都往后移 }else{k = next[k];//匹配不成功,看j串是第几个不成功,假设第n个不成功,即j回溯为next[n-1],找n-1处//的next值,即为k的下一次的值,然后下一次从k的值处开始匹配。 }}for(int i=0;i<strlen(T);i++){printf("next[%d] = %d\n",i,next[i]);}}int index_KMP(char *s,char *T,int pos){int i,j;i = pos, j = 0;while((i<strlen(s))&&(j<strlen(T))){if((j==-1)||(s[i]==T[j])){i++;j++;}else{j = next[j];}}if(strlen(T)==j){return i-strlen(T);}else{return -1;}}int main(void){char *s = "ababcacabcbab";char *t = "abcac";int pos = 0;int index;get_next(t,next);index = index_KMP(s,t,pos);printf("index = %d\n",index);//匹配好的位置 ,即为从第几个位置开始匹配成功 } 

原创粉丝点击