字符串查找之KMP
来源:互联网 发布:game of life 算法 编辑:程序博客网 时间:2024/05/16 06:29
根据定义next[0]=-1,假设next[j]=k, 即P[0...k-1]==P[j-k,j-1]
1)若P[j]==P[k],则next[j+1]=k+1;
2)若P[j]!=P[k],则k=next[k]。
#include <stdio.h>#include <string.h>#include <stdlib.h>void get_next(char *pat, int next[]){ int i, j, plen; plen = strlen(pat); i = 0; j = -1; next[0] = -1; while(i < plen-1){ if(j == -1 || pat[i] == pat[j]){ ++i; ++j; next[i] = j; } else{ j = next[j]; } }}int kmp_match(char *str, char *pat){ int slen, plen, i, j; int *next; if(str == NULL || pat == NULL){ return -1; } slen = strlen(str); if(slen <= 0){ return -1; } plen = strlen(pat); if(plen <= 0){ return -1; } if(slen < plen){ return 0; } next = (int *)malloc(plen*sizeof(int)); if(next == NULL){ return -1; } get_next(pat, next); i = 0; j = 0; while(i < slen){ if(j == -1 || str[i] == pat[j]){ i++; j++; } else{ j = next[j]; } if(j == plen){ free(next); return (i-plen); } } free(next); return 0;}int main(int argc, char *argv[]){ int ret; if(argc != 3){ printf("usage: a.out [patter] [string] \n"); return -1; } ret = kmp_match(argv[2], argv[1]); printf("ret = %d\n", ret); return 0;}
- 字符串查找之KMP
- 查找字符串之 KMP算法
- KMP字符串查找
- KMP算法查找字符串
- KMP字符串查找算法
- KMP 字符串查找
- KMP字符串查找
- KMP字符串查找算法
- 字符串查找算法-KMP
- KMP - 字符串查找算法
- 字符串查找算法kmp
- 字符串查找算法kmp
- KMP字符串查找算法
- KMP快速查找字符串
- KMP字符串查找算法
- 字符串查找-bf kmp
- 字符串查找算法之(一)KMP算法
- KMP子字符串查找算法
- java 类的学习——多态
- 学习AJAX--用JQuery实现文本框自动完成
- 在windows上使用symfony创建简易的CMS系统(二)
- windows系统上安装与使用Android NDK r5
- concepts阅读总结10——分区
- 字符串查找之KMP
- 巧尽其用的虫足
- 游戏地图分块加载资源篇——切图工具
- CSQA
- Android模拟按键——源码环境下开发应用程序
- VS快捷键使用分类收集
- Python各个框架工具介绍
- 从只Android开发 到 iphone,android两样双修
- 2011研发工作总结