[算法] kmp实现
2014-01-26 17:42
225 查看
字符串查找是经典场景,也是面试中最常见的一道题。
说来惭愧,毕业3年了,才明白了kmp算法的实现,以前一直以为这类算法是基础,工作中中不会碰到【也的确没有碰到过。。。】
但是,对这些基本算法结构的理解是做一个工程师最基本的技能,好好学习,天天向上,在年前项目停止打酱油的日子里,敲了个bf和kmp的实现
说来惭愧,毕业3年了,才明白了kmp算法的实现,以前一直以为这类算法是基础,工作中中不会碰到【也的确没有碰到过。。。】
但是,对这些基本算法结构的理解是做一个工程师最基本的技能,好好学习,天天向上,在年前项目停止打酱油的日子里,敲了个bf和kmp的实现
#include <stdio.h> #include <stdlib.h> #include <string.h> int bf(char *s, char* p) { int i, j; int lens,lenp; if(NULL == s || NULL == p) { return -1; } lens = strlen(s); lenp = strlen(p); for(i = 0; i < lens; i++) { j = 0; while(s[i] == p[j] && j < lenp) { i ++; j ++; } if(j == lenp) { return i - lenp; } i = i - j + 1; } return -1; } int main() { int ret; char s[] = "abcdhelloadf"; char p[] = "hello"; ret = bf(s, p); printf("%d", ret); return 0; }
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXN 100 char s[MAXN] = "ababaababcaba"; char p[MAXN] = "ababc"; int next[MAXN]; int kmp(char *s, char *p) { int i, j; int lens, lenp; if( NULL == s || NULL == p) { return -1; } lens = strlen(s); lenp = strlen(p); for(i = 0; i < lens; i++) { j = 0; while(s[i] == p[j] && j < lenp) { i ++; j ++; } if( j == lenp) { return i - j; } if(next[j] != -1){ j = next[j]; } else { j = 0; i ++; } } return -1; } void get_next(char *p, int *next) { int i, j; int len; int tmp; len = strlen(p); for(i = 0; i < len; i++) { if(i == 0) { next[i] = -1; } else if(i == 1) { next[i] = 0; } else { tmp = i - 1; for(j = tmp; j >= 0; j--) { if(equal(p, i, j)) { next[i] = j; break; } } } } } int equal(char *p, int i, int j) { int tmpi; for(tmpi = 0; tmpi < j; tmpi++) { if(p[tmpi] != p[i, i - j + tmpi]) { return 0; } } return 1; } int main() { int lenp; int ret; get_next(p, next); ret = kmp(s, p); printf("%d\n", ret); return 0; }
相关文章推荐
- 转载网络上最简单易懂的KMP模式匹配算法——外加代码实现
- KMP模式匹配算法 C++实现
- 算法 字符串匹配算法(朴素模式及KMP模式) java实现
- 数据结构之串的KMP模式匹配算法的实现
- java实现字符串的一般和KMP模式匹配算法
- KMP字符串匹配算法及C语言实现
- 【数据结构&&等差数列】KMP简介和算法的实现(c++ && java)
- 0050 KMP匹配算法的C++实现
- KMP算法基本思想与实现
- KMP匹配算法实现详解
- KMP模式匹配算法C++实现
- 模式匹配算法以及KMP的javascript实现
- kmp 算法实现
- KMP字符串模式匹配算法实现
- KMP字符串模式匹配算法实现
- 数据结构 KMP 算法实现
- 使用Python语言写一个简单的KMP模式匹配算法实现
- KMP模式匹配算法实现
- KMP字符串模式匹配算法实现
- 数据结构编程笔记十一:第四章 串 定长顺序串以及模式匹配算法(BF和KMP)的实现